Pythonで辞書をマージ(結合)する方法を紹介します。
いくつか方法があるので、それぞれ説明します。
演算子 | を使う
Python 3.9以降であれば、辞書をマージするのに演算子|
が使えます。
>>> d1 = {'k1': 'v11', 'k2': 'v12'} >>> d2 = {'k2': 'v22', 'k3': 'v23'} >>> # 演算子 | を使ってマージ >>> d1 | d2 {'k1': 'v11', 'k2': 'v22', 'k3': 'v23'} >>> d2 | d1 {'k2': 'v12', 'k3': 'v23', 'k1': 'v11'}
上記の様に、キー値が異なる要素(この場合は k1
とk3
)はそのままマージされます。
また、同じキー値をもつ要素(この場合は k2
)については |
の後に書いた辞書の要素が優先されます。
なお、|
を使っても元の辞書には影響がありません。
>>> # 元の辞書はそのまま >>> d1 {'k1': 'v11', 'k2': 'v12'} >>> d2 {'k2': 'v22', 'k3': 'v23'}
元の辞書を更新する演算子 |=
元の辞書を更新したい場合は、演算子|=
を使います。
>>> # d1を上書きする >>> d1 |= d2 >>> d1 {'k1': 'v11', 'k2': 'v22', 'k3': 'v23'}
Python 3.9以降をお使いであれば、|
や|=
を使うのが良いでしょう。
辞書のアンパックを使う
辞書のアンパックを使う方法もあります。
>>> d1 = {'k1': 'v11', 'k2': 'v12'} >>> d2 = {'k2': 'v22', 'k3': 'v23'} >>> # アンパックを使ってマージ >>> {**d1, **d2} {'k1': 'v11', 'k2': 'v22', 'k3': 'v23'} >>> {**d2, **d1} {'k2': 'v12', 'k3': 'v23', 'k1': 'v11'}
しかし、この方法は、あまり直感的ではありません。
パッと見ただけでは、2つの辞書をマージしていることが分かりにくいと思います。
update() メソッドを使う
辞書のupdate()
メソッドを使う方法もあります。
>>> d1 = {'k1': 'v11', 'k2': 'v12'} >>> d2 = {'k2': 'v22', 'k3': 'v23'} >>> # update() メソッドを使ってマージ >>> d1.update(d2) >>> d1 {'k1': 'v11', 'k2': 'v22', 'k3': 'v23'}
しかし、update()
メソッドは元の辞書を更新してしまうため、元の辞書を変更したくない場合には使えません。
まとめ
Pythonで辞書をマージする方法を紹介しました。