Pythonの辞書をマージ(結合)する方法(update() / 演算子)初心者向け完全ガイド
生徒
「Pythonで辞書を2つ結合して1つにまとめたいんですが、どうすればいいですか?」
先生
「辞書をマージ(結合)するには、update()メソッドや、|演算子(パイプ演算子)を使う方法があります。」
生徒
「update()と|はどう違うんですか?」
先生
「では、それぞれの特徴と使い方を順番に説明していきましょう!」
1. 辞書をマージ(結合)するとは?
Python(パイソン)の辞書(dictionary)は、「名前:太郎」「年齢:30歳」のように、「キー(Key)」と「値(Value)」をペアにして管理する非常に便利なデータ構造です。
プログラミングをしていると、別々に作った複数のデータを1つにまとめたい場面がよくあります。この操作をマージ(merge)、または結合と呼びます。例えば、名簿アプリで「基本プロフィール」と「連絡先」という2つの辞書をガッチャンコして、1つの「完全なユーザー情報」を作るようなイメージです。
「苗字が書かれたカード」と「名前が書かれたカード」を、1つのクリアファイルにまとめ直して管理しやすくする作業に似ています。
まずは、結合する前の2つの辞書を用意するコードを見てみましょう。
# 1つ目の辞書(ユーザーの基本情報)
user_info = {"name": "Taro", "age": 30}
# 2つ目の辞書(追加の住所や仕事情報)
extra_info = {"city": "Tokyo", "job": "Engineer"}
このように、バラバラの状態では扱いにくいデータも、Pythonに用意されている専用の方法を使うことで、重複を避けながら賢く1つに統合することが可能です。次章からは、具体的な結合の手順を初心者の方にも分かりやすく解説していきます。
2. update()メソッドで既存の辞書を更新・結合する方法
Pythonで「すでにある辞書に、別の辞書のデータをまとめて入れたい」という時に最もよく使われるのが、このupdate()メソッドです。 新しく結合用の辞書を作るのではなく、元の辞書を直接書き換えて(更新して)合体させるのが特徴です。
初心者向けのイメージ:
「名簿(辞書A)」に「追加の連絡先リスト(辞書B)」を上書き保存するような感覚です。
# 元のユーザー情報
user_info = {'name': 'Taro', 'age': 30}
# 追加したいデータ
extra_info = {'city': 'Tokyo', 'job': 'Engineer'}
# updateメソッドで結合!
user_info.update(extra_info)
print(user_info)
{'name': 'Taro', 'age': 30, 'city': 'Tokyo', 'job': 'Engineer'}
注意点:キーが重複した場合の挙動
もし結合する両方の辞書に「同じ名前のキー」があった場合、後から追加した方の値が優先され、元の値は消えてしまいます。 プログラミングの世界ではこれを「上書き」と呼びます。
# 'age'がどちらにも存在するケース
user = {'name': 'Taro', 'age': 30}
new_data = {'age': 31, 'city': 'Osaka'}
user.update(new_data)
# ageが30から31に書き換わります
print(user)
ポイント:
1. 元の辞書の中身が変わる(破壊的処理といいます)。
2. 同じキーは新しいデータで塗り替えられる。
この2点を押さえておけば、データの更新作業が非常にスムーズになります。
3. 演算子(|)で結合する方法(Python 3.9以降の新機能)
Python 3.9というバージョンから、「|(パイプ)」という記号を使って、2つの辞書をより直感的にガッチャンコ(結合)できるようになりました。これは「マージ演算子」と呼ばれ、複雑なコードを書かずにシンプルに辞書をまとめられるのが最大の特徴です。
初心者の方にとって嬉しいポイントは、「元のデータが壊れない」という点です。元の辞書(user_infoやextra_info)はそのままの状態で、新しく合体させた辞書を「別物」として作成します。そのため、「元のデータを後でまた使いたい」という場面で非常に安全にプログラムを組むことができます。
# 1つ目の辞書
user_info = {'name': 'Taro', 'age': 30}
# 2つ目の辞書
extra_info = {'city': 'Tokyo', 'job': 'Engineer'}
# 「|」演算子で2つを合体させて、新しい変数「merged」に入れる
merged = user_info | extra_info
# 結果を確認
print(merged)
# 元のデータが変わっていないことも確認
print(user_info)
{'name': 'Taro', 'age': 30, 'city': 'Tokyo', 'job': 'Engineer'}
{'name': 'Taro', 'age': 30}
このように、mergedという新しい箱に合体結果が入るため、データ管理が非常に楽になります。「どっちの辞書が優先されるの?」と疑問に思うかもしれませんが、後ろ(右側)にある辞書に同じキーがあれば、その値で上書きされるというルールだけ覚えておけば完璧です。
4. 演算子(|=)で元の辞書を更新する
|=演算子を使えば、元の辞書を更新しながら結合できます。
user_info |= extra_info
print(user_info)
{'name': 'Taro', 'age': 30, 'city': 'Tokyo', 'job': 'Engineer'}
これはupdate()と同じように元の辞書を直接変更します。
5. 実用例:設定ファイルのマージ
例えば、アプリケーションの初期設定とユーザーのカスタム設定をマージして最終設定を作ることができます。
default_settings = {"theme": "light", "language": "ja", "volume": 50}
user_settings = {"theme": "dark", "volume": 80}
final_settings = default_settings | user_settings
print(final_settings)
{'theme': 'dark', 'language': 'ja', 'volume': 80}
ユーザー設定が優先される形でマージされます。
6. update()と演算子の使い分け
update():元の辞書を直接変更するとき|:新しい辞書を作って元の辞書を残すとき|=:演算子の書き方で直接更新したいとき
どちらもシンプルで覚えやすいので、状況に合わせて選びましょう。辞書のマージはデータ処理や設定管理でよく使われる基本テクニックです。