Python で dict を merge、辞書をマージする2020年04月23日 12時04分42秒

Python では、配列と辞書を多用する。そこで、手軽に二つの物を一緒くたにしたくなることは多い。C++ 等だと、STL でコンテナ型をあまり気にせずに、似たような処理を行える algorithm ライブラリなど充実しているが、Python は各々にちょっとした知識が必要だ。

Python で辞書をマージさせるのには特別な書式が Python 3.5 から導入された。

{ **dict1, **dict2 }
の書式で、マージが出来る。動作としては、dict1 を基に新しい dict を作り、そこに dict2 以降の内容を上書きしていくようだ。

簡単な実行例。

% cat dictmerge.py
#!/usr/local/bin/python3.6

a = { "a": "a", "b": "b" }
z = { "z": "z", "y": "y" }
A = { "a": "A", "b": "B" }
print( a )
print( "a + z = ", { **a, **z } )
print( "a + A = ", { **a, **A } )
print( "A + a = ", { **A, **a } )
a と z 辞書はキーが重ならない小文字。A 辞書は a 辞書の大文字。

実行結果はこうなる。

% ./dictmerge.py
{'a': 'a', 'b': 'b'}
a + z =  {'a': 'a', 'b': 'b', 'z': 'z', 'y': 'y'}
a + A =  {'a': 'A', 'b': 'B'}
A + a =  {'a': 'a', 'b': 'b'}