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. 累積代入演算子(|=)で元の辞書を上書き更新する
Python 3.9から追加された「|=(マージ代入演算子)」を使うと、既存の辞書に新しいデータを直接合体させることができます。これは、元のデータを新しい内容で塗り替えて「最新の状態にアップデートしたい」ときに非常に便利な書き方です。
プログラミング未経験の方でも直感的に理解できるよう、身近な例で見てみましょう。例えば、あるユーザーの基本情報が入った辞書に、後から追加のプロフィール情報を付け加えるシーンを想像してください。
# 1. 元々のユーザー情報
user_info = {'name': 'Taro', 'age': 30}
# 2. 追加したい新しい情報
extra_info = {'city': 'Tokyo', 'job': 'Engineer'}
# 3. |= 演算子で user_info そのものを更新!
user_info |= extra_info
# 結果を確認
print(user_info)
{'name': 'Taro', 'age': 30, 'city': 'Tokyo', 'job': 'Engineer'}
このコードを実行すると、user_infoという辞書自体が書き換えられ、新しいデータが統合されているのがわかります。もし追加するデータの中に「同じ名前のキー(項目)」があった場合は、後から追加した方の値で上書きされるという特徴があります。
使い方のイメージとしては、a = a + 1 を a += 1 と書くのと同じ感覚です。従来のupdate()メソッドと同じ役割を果たしますが、記号(演算子)を使うことでコードがより短く、スッキリと読みやすくなるのがメリットです。
5. 実用例:設定ファイルのマージ(辞書結合)
Pythonで辞書(dict)を扱う際、最も頻繁に登場する実用的なシーンが「設定データの統合」です。例えば、アプリが元々持っている「初期設定(デフォルト)」と、ユーザーが自分好みに変更した「カスタム設定」を一つにまとめる作業です。
プログラミング未経験の方でも直感的に理解できるよう、スマートフォンの設定を例に見てみましょう。演算子「|」を使うだけで、複雑なループ処理を書かなくても簡単にマージ(結合)が可能です。
# 1. アプリ側の初期設定(ベースとなる値)
default_settings = {
"theme": "light", # 背景色
"language": "ja", # 言語
"volume": 50 # 音量
}
# 2. ユーザーが変更した設定(上書きしたい値)
user_settings = {
"theme": "dark", # ダークモードに変更
"volume": 80 # 音量を大きく変更
}
# 3. 2つの辞書をマージして「最終的な設定」を作る
# 重複する項目は、右側(user_settings)の値で上書きされます
final_settings = default_settings | user_settings
print(final_settings)
{'theme': 'dark', 'language': 'ja', 'volume': 80}
このコードのポイントは、「後から指定した値(右側)が優先される」という点です。上記の実行結果を見ると、"theme"は "dark" に、"volume" は 80 に更新されていますが、ユーザーが触れていない "language": "ja" はそのまま残っています。このように、辞書の結合(マージ)を活用すれば、ユーザーのこだわりを反映させたシステム設定を最小限の記述で実装できます。
6. update()と演算子(| / |=)の使い分け
Pythonで辞書を結合する方法はいくつかありますが、代表的なのがupdate()メソッドと、Python 3.9から追加された結合演算子(|、|=)です。初心者の方でも迷わないように、具体的な違いを整理しました。
既存の辞書を書き換える:update() と |=
今ある辞書の中身を直接アップデートしたい場合に便利です。例えば、ユーザーの設定情報に新しい項目を追加するようなケースでよく使われます。
# update()を使う方法
user_info = {"name": "田中", "age": 25}
user_info.update({"city": "東京"})
print(user_info) # {'name': '田中', 'age': 25, 'city': '東京'}
# |= 演算子を使う方法(短く書けます)
user_info |= {"status": "ログイン中"}
print(user_info) # {'name': '田中', 'age': 25, 'city': '東京', 'status': 'ログイン中'}
元のデータを残して新しい辞書を作る:| 演算子
元の辞書はそのまま保管しておき、結合した結果だけを別の変数に入れたいときは「|」を使います。元のデータを壊したくない安全なデータ処理に向いています。
# | 演算子で新しい辞書を作成
base_config = {"color": "red", "size": "M"}
new_config = base_config | {"size": "L", "font": "serif"}
print(base_config) # 元のデータは {'color': 'red', 'size': 'M'} のまま
print(new_config) # 新しいデータは {'color': 'red', 'size': 'L', 'font': 'serif'}
このように、元の辞書を「上書きして更新したいのか」それとも「残したまま合体させたいのか」という目的によって使い分けるのが、スマートなプログラムを書くコツです。辞書のマージは設定ファイルの読み込みやWebアプリのデータ処理で非常に多用されるため、この3つの使い分けを覚えておくと開発がぐっと楽になります。