🐍 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)のような他の書き方を検討しましょう。