質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1090閲覧

python 内包表記を用いた辞書の結合

horiegom

総合スコア152

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/22 00:12

編集2021/12/22 00:16

python>=3.5

複数の辞書を結合したい場合は以下のように書けます。

python

1a = {'1':1, '2':2 } 2b = {'11':11, '12':12} 3 4new = {**a, **b} 5

内包表記を使って書くことはできるでしょうか。
(下例ではわざわざ内包表記を使うまでもありませんが)

python

1a = {'1':1, '2':2 } 2b = {'11':11, '12':12} 3dict_list = [a, b] 4 5new = {**i for i in dict_list} 6>>SyntaxError: dict unpacking cannot be used in dict comprehension 7 8new = {{**i for i} in dict_list} 9>>SyntaxError: invalid syntax 10 11new = {{**i for i} in dict_list} 12>>SyntaxError: invalid syntax 13 14new = {**{k:v for k,v in i.items() } for i in dict_list} 15new 16SyntaxError: dict unpacking cannot be used in dict comprehension

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

以下です。

python

1>>> a = {'1':1, '2':2 } 2>>> b = {'11':11, '12':12} 3>>> dict_list = [a, b] 4>>> {k : d[k] for d in dict_list for k in d} 5{'1': 1, '2': 2, '11': 11, '12': 12}

投稿2021/12/22 00:49

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

horiegom

2021/12/22 05:06

ありがとうございます。 この記法は前からよく理解できておらず {k : d[k] for k in d for d in dict_list} ではなく、 {k : d[k] for d in dict_list for k in d} が正しい理由がわかっていません。 dict_listを先に評価するのに、真ん中に for d in dist_listが来るのは (そういう文法だから)といえばそうなのでしょうが、なぜでしょうか
ppaul

2021/12/22 09:23

言われるとわかりにくい構文ですね。ちょっと公式ドキュメントを調べてみましたがfor_if_clausesがfor_if_clauseの繰り返しであるというBNFはあるのですが、その意味等についての説明は見当たりませんでした。そういう文法だということなのでしょう。
guest

0

下記の書き方はどうでしょうか?

python

1a = {'1':1, '2':2 } 2b = {'11':11, '12':12} 3dict_list = [a, b] 4 5new_list = {} 6[new_list.update(i) for i in dict_list] 7print(new_list) 8# {'1':1, '2':2,'11':11, '12':12}

投稿2021/12/22 00:49

meg_

総合スコア10760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2021/12/22 02:21

これだと内包表記する意味が無いような...
meg_

2021/12/22 04:26

質問者さんの求めていたものはppaulさんの回答ですね。失礼しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問