dict1.update((k, dict2[k]) for k in set(dict2).intersection(dict1))
Python 2.6以下でこれを行う方法です(これ以降のバージョンでこれを行う方法については、詳細を参照してください)。
別のマッピングの隣に、2つのディクショナリの設定された共通部分に基づいて生成するタプルdict.update()
の反復可能を取得することもできます(したがって、それらが共通に持つすべてのキー)。(key, value)
デモ:
>>> dict1 = {'foo':'bar', 'ham': 'eggs'}
>>> dict2 = {'ham': 'spam', 'bar': 'baz'}
>>> dict1.update((k, dict2[k]) for k in set(dict2).intersection(dict1))
>>> dict1
{'foo': 'bar', 'ham': 'spam'}
Python 2.7では、新しいDictビューを使用して、セットにキャストせずに同じことを実現できます。
dict1.update((k, dict2[k]) for k in dict1.viewkeys() & dict2.viewkeys())
Python 3では、dictビューがデフォルトであるため、代わりに次のように綴ることができます。
dict1.update((k, dict2[k]) for k in dict1.keys() & dict2.keys())