🐍 Python

| 演算子・** アンパックで辞書をマージする

元の辞書を書き換えずに、2つの辞書を結合した新しい辞書を作りたいときは**アンパックや|演算子が便利です。update()と違い、どちらも新しい辞書を作って返すので元のデータは変わりません。

{**d1, **d2}  # ** アンパックでマージ(Python 3.5+)
d1 | d2       # | 演算子でマージ(Python 3.9+)
d1 |= d2      # | = で d1 自身を更新(Python 3.9+)
# **アンパックによるマージ(後に書いた方が優先)
d1 = {"a": 1, "b": 2}
d2 = {"b": 20, "c": 3}
merged = {**d1, **d2}
print(merged)
# {'a': 1, 'b': 20, 'c': 3}

# 元の辞書はどちらも変わらない
print(d1)
# {'a': 1, 'b': 2}
print(d2)
# {'b': 20, 'c': 3}
# |演算子でも同じことができる(Python 3.9以降)
d1 = {"a": 1, "b": 2}
d2 = {"b": 20, "c": 3}
merged2 = d1 | d2
print(merged2)
# {'a': 1, 'b': 20, 'c': 3}
# |= はd1自身を更新する(update()と似た効果)
d1 = {"a": 1}
d1 |= {"b": 2}
print(d1)
# {'a': 1, 'b': 2}
マージ方法とバージョン要件
{**d1, **d2}
Python 3.5以降で使用可能。新しい辞書を作って返す(元は不変)
d1 | d2
Python 3.9以降で使用可能。{**d1, **d2}と同じ結果を、より短く書ける
d1 |= d2
Python 3.9以降で使用可能。d1自身を書き換える点はupdate()と同じ
💡 AIコードレビュー観点:実行環境のPythonバージョンを確認する

|演算子による辞書マージはPython 3.9で追加された比較的新しい機能です。AIが生成したコードにこの書き方が含まれていても、実行環境が3.9未満(例えば3.8以前や、組み込み機器向けの古い環境)だとTypeError: unsupported operand type(s)になります。古い環境もサポートする必要があるなら、より互換性の高い{**d1, **d2}やupdate()を使うか、dict(d1, **d2)のような他の書き方を検討しましょう。

← Python dict クイックリファレンス一覧へ戻る / update()で一括更新する →