Pythonで辞書を結合(マージ・連結)する多様な方法
Pythonでデータを扱う際、複数の辞書に散らばった情報を一つにまとめたい、つまり「結合(マージ)」したい場面は頻繁にあります。例えば、異なるソースから得たユーザープロファイル情報を統合したり、設定ファイルを一つにまとめたりする際に必要となります。この記事では、Pythonで辞書同士を効率的かつスマートに結合する様々な方法を、短いサンプルコードとともに解説します。
辞書結合の基本ルール
辞書を結合する際、重要なルールがあります。
キーの衝突: 複数の辞書に同じキーが存在する場合、後から結合される辞書の値が優先され、上書きされます。
新しい辞書の作成: ほとんどの方法で、結合結果は新しい辞書として返され、元の辞書が直接変更されることはありません(一部例外あり)。
Pythonで辞書を結合する方法
Pythonのバージョンによって推奨される方法や利用できる機能が異なります。
1. 波括弧 {} とアンパック演算子 ** を使う方法(Python 3.5以降推奨)
Python 3.5以降で導入された辞書のアンパック演算子 ** を使う方法は、最も簡潔で推奨される結合方法です。これは新しい辞書を作成し、その中に展開された辞書の内容をコピーします。
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
dict3 = {"d": 5}
# 辞書1と辞書2を結合
merged_dict = {**dict1, **dict2}
print(f"dict1とdict2の結合: {merged_dict}")
# 出力: dict1とdict2の結合: {'a': 1, 'b': 3, 'c': 4}
# 複数の辞書を結合
all_merged_dict = {**dict1, **dict2, **dict3}
print(f"全ての辞書の結合: {all_merged_dict}")
# 出力: 全ての辞書の結合: {'a': 1, 'b': 3, 'c': 4, 'd': 5}
この方法は、可読性が高く、複数の辞書を一度に結合できるため非常に便利です。キーが重複する場合は、右側(後から書かれた辞書)の値が優先されます。
2. dict.update() メソッドを使う方法
update()メソッドは、既存の辞書に別の辞書のキーと値を「更新」する形で追加します。このメソッドは元の辞書を直接変更する点に注意が必要です。新しい辞書を作成したい場合は、事前に元の辞書のコピーを作成しておく必要があります。
dict_a = {"name": "Alice", "age": 30}
dict_b = {"age": 31, "city": "Tokyo"}
# dict_aを直接更新
dict_a.update(dict_b)
print(f"update()後のdict_a: {dict_a}")
# 出力: update()後のdict_a: {'name': 'Alice', 'age': 31, 'city': 'Tokyo'}
# 新しい辞書として結果を得たい場合
dict_c = {"item1": "apple"}
dict_d = {"item2": "banana"}
new_dict = dict_c.copy() # dict_cのコピーを作成
new_dict.update(dict_d)
print(f"copy()とupdate()で結合: {new_dict}")
# 出力: copy()とupdate()で結合: {'item1': 'apple', 'item2': 'banana'}
update()は、特に少数の辞書を既存の辞書にマージしたい場合に便利ですが、元の辞書が変更されることに注意してください。
3. パイプ演算子 | を使う方法(Python 3.9以降推奨)
Python 3.9以降では、辞書の結合にパイプ演算子 | が使えるようになりました。これは、アンパック演算子 ** と同様に、新しい辞書を返すため、元の辞書を変更しません。
dict_x = {"color": "red", "size": "M"}
dict_y = {"size": "L", "material": "cotton"}
# 辞書xと辞書yを結合
combined_dict = dict_x | dict_y
print(f"パイプ演算子で結合: {combined_dict}")
# 出力: パイプ演算子で結合: {'color': 'red', 'size': 'L', 'material': 'cotton'}
**によるアンパックと同様に、キーが重複する場合は右側(|の右隣の辞書)の値が優先されます。この方法は、**と同様に簡潔で、Python 3.9以降を使用している場合は推奨されます。
まとめ
Pythonで辞書を結合する方法はいくつかありますが、プロジェクトのPythonバージョンや、元の辞書を変更したいかどうかに応じて最適な方法を選ぶことが重要です。
{**dict1, **dict2}(アンパック演算子):Python 3.5以降で推奨される、最も簡潔でPythonicな方法。
新しい辞書を作成し、複数の辞書を一度に結合できます。
キー重複時は右側が優先。
dict.update(other_dict):既存の辞書を直接変更します。新しい辞書が欲しい場合は
copy()と組み合わせる。単一または少数の辞書をマージするのに適しています。
dict1 | dict2(パイプ演算子):Python 3.9以降で利用可能。
新しい辞書を作成し、
**と同様に簡潔です。キー重複時は右側が優先。
これらの結合方法を使いこなすことで、Pythonでのデータ処理や辞書操作がより効率的かつ柔軟になります。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座





