Pythonの話題:辞書の結合(再論)

辞書の結合を議論した。「ばらす」演算子(**)を使った以下のような方法を紹介した。


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()))

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です