Python で2つの dict を結合する実装パターンをいくつか掲載します。
目次
update メソッドで更新する
dict クラスには update メソッドがあり、これで dict の結合ができます。
Python
dict1 = {"a": 1, "b": 2, "c": 3}
dict2 = {"b": 12, "d": 14}
dict1.update(dict2)
print(dict1)
# {'a': 1, 'b': 12, 'c': 3, 'd': 14}
update 方式では、一方の dict が直接更新されます。
また、キーの重複があった場合は、エラーとはならず dict2 の値で上書きされます。
上の例では “b” が 12 で更新されています。
基本的には、視認性の観点で後述の |= 演算子を利用する方が良いかと思います。
{} の初期化で結合する
{} による dict 初期化で dict の結合が可能です。
Python
dict1 = {"a": 1, "b": 2, "c": 3}
dict2 = {"b": 12, "d": 14}
dict3 = {**dict1, **dict2}
print(dict3)
# {'a': 1, 'b': 12, 'c': 3, 'd': 14}
新規 dict を生成します。
キー重複があった場合は、エラーとはならず dict2 の値で上書きされます。
基本的には、視認性の観点で後述の | 演算子を利用する方が良いかと思います。
| 演算子で結合する
| 演算子
| 演算子を利用することで dict の結合が可能です。
{} 初期化による結合と同等の効果が得られます。
Python
dict1 = {"a": 1, "b": 2, "c": 3}
dict2 = {"b": 12, "d": 14}
dict3 = dict1 | dict2
print(dict3)
# {'a': 1, 'b': 12, 'c': 3, 'd': 14}
新規 dict を生成します。
キー重複があった場合は、エラーとはならず dict2 の値で上書きされます。
|= 演算子
|= 演算子も利用可能です。
update と同じ効果です。
Python
dict1 = {"a": 1, "b": 2, "c": 3}
dict2 = {"b": 12, "d": 14}
dict1 |= dict2
print(dict1)
# {'a': 1, 'b': 12, 'c': 3, 'd': 14}
dict の初期化で結合する
dict コンストラクタによる初期化で結合することもできます。
Python
dict1 = {"a": 1, "c": 3}
dict2 = {"b": 12, "d": 14}
dict3 = dict(**dict1, **dict2)
print(dict3)
# {'a': 1, 'c': 3, 'b': 12, 'd': 14}
新規 dict を生成します。
キー重複時のエラー
上記ではキー重複のない例を掲載しましたが、この手法ではキー重複はエラーとしてハンドリングされます。
Python
dict1 = {"a": 1, "b": 2, "c": 3}
dict2 = {"b": 12, "d": 14}
dict3 = dict(**dict1, **dict2)
print(dict3)
実行結果
Traceback (most recent call last):
File "D:\samples\main.py", line 4, in <module>
dict3 = dict(**dict1, **dict2)
^^^^^^^^^^^^^^^^^^^^^^
TypeError: dict() got multiple values for keyword argument 'b'
キー重複を異例ケースとしてハンドリングしたい際に有用です。
コメント