辞書型値の結合
2chスレ「Pythonのお勉強Part33」より。面白かったのでちょっとまとめてみました。
http://pc12.2ch.net/test/read.cgi/tech/1240678081/244-
2つをマージした新しい辞書dict3を一発でつくるにはどうしたらいいですか
(...)
D1もD2も変更せずに、かつD1とD2をマージした辞書を一発で新たに作りたい
コード的に短いのは、dict()の引数に辞書1をそのまま渡し、キーワード引数として辞書2を渡す方法。
d = dict(d1, **d2)
これだと2つずつしか結合できないので、3つ以上だとdictの入れ子になります。
d = dict(dict(d1,**d2), **d3)
d.items()を使えば、わりと直感的?な書き方になります。
d = dict(d1.items() + d2.items() + d3.items())
でもPython 3.xはd.items()がイテレータを返すため動きません。itertools.chainを使えば対応できますが…。
from itertools import chain d = dict(chain(d1.items(), d2.items(), d3.items()))
結局のところ最初copyして逐次updateで集約していく方法が、汎用性が高く、効率もよいものと考えられます。
d = d1.copy() d.update(d2) d.update(d3)