辞書の結合を議論した。「ばらす」演算子(**)を使った以下のような方法を紹介した。
d = dict(**d1, **d2)
これはスマートに見える方法であるが、万能ではない。
例を示す:
>>> d1 = dict()
>>> d1[1]='one'
>>> d1[2]='two'
>>> d2=dict()
>>> d2[3]='three'
>>> d2[4]='four'
>>> d=dict(**d1, **d2)
Traceback (most recent call last):
File "<pyshell#6>", line 1, in
d=dict(**d1, **d2)
TypeError: keywords must be strings
>>
つまりキーが文字列以外のときは上記の方法は使えないことになる。
d1.update(d2)
とする方法もあるが、d1が書き換えられてしまうので面白くない。
以下のような関数はどうだろうか
def dict_merge(d1, d2):
"""二つの辞書d1,d2を結合して新たな辞書d
を返す関数"""
d = dict()
for key, item in d1.items():
d[key] = item
for key, item in d2.items():
d[key] = item
return d
d1=dict()
d1[1] = 'one'
d1[2] = 'two'
print(d1)
d2=dict()
d2[3] = 'three'
d2[4] = 'four'
print(d2)
d = dict_merge(d1, d2)
print(d)
追記:
コマンドで書ける:
d=dict(list(d1.items()) + list(d2.items()))