Python | dict を結合する(update, {}初期化, |演算子, dict初期化)

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'

キー重複を異例ケースとしてハンドリングしたい際に有用です。

  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次