Python Tips: 複数の辞書を統合したい

Python で 2 つの辞書を統合する方法をご紹介します。

基本的には 辞書型の update メソッドを使う形が最もシンプルかつかんたんな方法です。

land_animal = {'uma': 3, 'ushi': 5, 'kame': 7}
sea_animal = {'kujira': 10, 'kame': 12}

land_animal.update(sea_animal)

print(land_animal) # => {'kame': 12, 'kujira': 10, 'uma': 3, 'ushi': 5}

update は Ruby でいうところの破壊的メソッドで、レシーバそのものを変更してしまう点に注意が必要です。上の例では land_animal が書き換えられます。 land_animal を残しておきたい場合は copy してから update するのがよいでしょう。

all_animal = land_animal.copy()
all_animal.update(sea_animal)

ちなみに update 関数は他の辞書を受け取る形だけでなくキーワード引数を渡す形で使うことも可能です。

land_animal = {'uma': 3, 'ushi': 5, 'kame': 7}

land_animal.update(uma=10)
print(land_animal)  # => land_animal = {'uma': 10, 'ushi': 5, 'kame': 7}

辞書型を同じキーを持つ要素の値を足し合わせる形で使うには collections.Counter を使うのが便利です。 collections.Counter クラスのインスタンスでは辞書型にはない「 + 」演算子がサポートされています。

from collections import Counter

land_animal = {'uma': 3, 'ushi': 5, 'kame': 7}
sea_animal = {'kujira': 10, 'kame': 12}

land_animal_counter = Counter(land_animal)
sea_animal_counter = Counter(sea_animal)
all_animal_counter = land_animal_counter + sea_animal_counter

all_animal = dict(all_animal_counter)