Pythonの辞書を結合・マージする方法!update()や|演算子の活用法
生徒
「先生、Pythonの辞書を2つ以上まとめて一つにしたいときはどうしたらいいですか?」
先生
「いい質問ですね。Pythonには辞書を結合・マージするための便利な方法がいくつかあります。代表的なのはupdate()メソッドと、Python3.9から使える|(パイプ)演算子です。」
生徒
「具体的にどうやって使うんですか?初心者でもわかるように教えてください!」
先生
「わかりました。順番に丁寧に説明していきますね。」
1. Pythonの辞書とは?簡単なおさらい
辞書(dictionary)は「キー」と「値」の組み合わせを管理するデータ構造です。例えば、りんごの色やバナナの色を保存できます。
fruits = {"りんご": "赤", "バナナ": "黄色"}
ここで「りんご」や「バナナ」がキー、「赤」や「黄色」が値です。
2. 複数の辞書を結合したい理由
プログラムを作るとき、別々の辞書をまとめて1つにしたいことがあります。たとえば、2つの果物の色の辞書を1つにまとめたい場合です。
dict1 = {"りんご": "赤", "バナナ": "黄色"}
dict2 = {"みかん": "オレンジ", "ぶどう": "紫"}
これらを1つの辞書にまとめる方法を次に紹介します。
3. update()メソッドで辞書を結合する方法
update()メソッドは、ある辞書に別の辞書の中身を追加・上書きする便利な方法です。
dict1 = {"りんご": "赤", "バナナ": "黄色"}
dict2 = {"みかん": "オレンジ", "ぶどう": "紫"}
dict1.update(dict2)
print(dict1)
出力結果は、2つの辞書のキーと値が一つにまとまったものになります。
{'りんご': '赤', 'バナナ': '黄色', 'みかん': 'オレンジ', 'ぶどう': '紫'}
update()は元の辞書(ここではdict1)を直接書き換えます。もし元の辞書を変えたくない場合は、コピーしてから使いましょう。
dict1 = {"りんご": "赤", "バナナ": "黄色"}
dict2 = {"みかん": "オレンジ", "ぶどう": "紫"}
new_dict = dict1.copy() # dict1のコピーを作る
new_dict.update(dict2)
print(new_dict) # 新しい辞書
print(dict1) # 元のdict1はそのまま
4. | 演算子(Python3.9以降)で辞書を結合・マージする方法
Python3.9からは、|(パイプ)演算子で辞書を簡単に結合できます。こちらは新しい辞書を作るので元の辞書は変わりません。
dict1 = {"りんご": "赤", "バナナ": "黄色"}
dict2 = {"みかん": "オレンジ", "ぶどう": "紫"}
merged_dict = dict1 | dict2
print(merged_dict)
{'りんご': '赤', 'バナナ': '黄色', 'みかん': 'オレンジ', 'ぶどう': '紫'}
この方法は読みやすくて便利です。ただしPython3.9以降でしか使えません。
5. |= 演算子で辞書を更新する方法
同じくPython3.9から、|=演算子で辞書を更新(上書き)することもできます。これはupdate()に似ています。
dict1 = {"りんご": "赤", "バナナ": "黄色"}
dict2 = {"バナナ": "緑", "みかん": "オレンジ"}
dict1 |= dict2
print(dict1)
{'りんご': '赤', 'バナナ': '緑', 'みかん': 'オレンジ'}
注意点として、dict2のキー「バナナ」が重複しているので、値が「黄色」から「緑」に更新されています。
6. キーが重複したときの上書きルール
辞書を結合する際、同じキーが両方にある場合は、後から結合した辞書の値で上書きされます。
dict1 = {"りんご": "赤"}
dict2 = {"りんご": "緑"}
dict1.update(dict2)
print(dict1) # {'りんご': '緑'}
これは|演算子でも同じルールです。
7. 複数の辞書をまとめて結合したいときは?
複数の辞書をまとめて結合する場合は、update()や|演算子を何度も使うか、辞書のアンパックを使う方法もあります。
dict1 = {"りんご": "赤"}
dict2 = {"バナナ": "黄色"}
dict3 = {"みかん": "オレンジ"}
# updateを使う場合
merged = dict1.copy()
merged.update(dict2)
merged.update(dict3)
print(merged)
# アンパックを使う場合(Python3.5以降)
merged2 = {**dict1, **dict2, **dict3}
print(merged2)
8. 使い分けのポイント
update()は元の辞書を変更したいときに使う。|演算子は新しい辞書を作りたいときに便利。- Pythonのバージョンによっては
|演算子が使えない場合もあるので注意。 - キーが重複したら後から結合した辞書の値で上書きされる。
- 複数辞書の結合にはアンパックも便利。
まとめ
Pythonの辞書結合とマージを全体から振り返る
今回の記事では、Pythonの辞書を結合・マージする方法について、初心者にも理解しやすい形で詳しく解説してきました。Pythonの辞書は、キーと値をセットで管理できる便利なデータ構造であり、プログラムの中で情報を整理したり、状態を管理したりする場面で欠かせない存在です。その辞書を複数まとめて扱えるようになると、実践的なプログラミングの幅が大きく広がります。
辞書を結合する代表的な方法として、updateメソッド、パイプ演算子、代入付きパイプ演算子、そしてアンパック構文を学びました。それぞれの方法には特徴があり、元の辞書を変更するのか、新しい辞書を作るのか、Pythonのバージョンに依存するのかといった違いがあります。こうした違いを理解して使い分けることが、Pythonの辞書操作を正しく身につけるための重要なポイントです。
updateメソッドの役割と注意点
updateメソッドは、既存の辞書に別の辞書の中身を追加するための基本的な方法です。キーが重複している場合は、後から指定した辞書の値で上書きされるというルールがあり、この動作を理解していないと、意図しないデータの変更につながることがあります。一方で、処理がシンプルで初心者にも分かりやすく、Pythonの辞書操作を学ぶ最初のステップとして非常に適しています。
元の辞書を変更したくない場合は、コピーを作ってからupdateを使うことで、安全に辞書を結合できます。この考え方は、Pythonの辞書だけでなく、他のデータ構造を扱う際にも役立つ基本的な発想です。
パイプ演算子による辞書マージの魅力
Python三点九以降で使えるパイプ演算子は、辞書同士を直感的に結合できる新しい方法です。記号一つで辞書をマージできるため、コードが読みやすくなり、処理の意図も明確になります。新しい辞書が作られるため、元の辞書を保持したい場合にも安心して使える点が大きな利点です。
ただし、Pythonのバージョンによっては使用できないため、開発環境や実行環境を意識する必要があります。現場では、updateとパイプ演算子のどちらが適しているかを状況に応じて判断する力が求められます。
サンプルプログラムで辞書結合を再確認
prices_a = {"りんご": 100, "バナナ": 120}
prices_b = {"みかん": 80, "ぶどう": 200}
# 新しい辞書として結合
all_prices = prices_a | prices_b
print(all_prices)
# 既存の辞書を更新
prices_a.update(prices_b)
print(prices_a)
このサンプルのように、辞書の結合方法を使い分けることで、データの扱い方を柔軟に選択できます。Pythonの辞書結合は、商品管理、設定情報の統合、ユーザー情報のまとめなど、さまざまな場面で活用される重要なテクニックです。
辞書結合を理解することの学習的な意味
辞書の結合やマージを正しく理解することは、単なる文法の暗記ではなく、データの流れや状態の変化を意識する力を養うことにつながります。Python初心者の段階で、この考え方に触れておくことで、条件分岐やループ処理、関数、さらにはアプリケーション開発へとスムーズにステップアップできます。
辞書操作に慣れてくると、自分でデータ構造を設計できるようになり、プログラム全体の見通しも良くなります。今回学んだ辞書の結合方法は、そのための大切な基礎知識の一つです。
生徒「辞書を結合する方法がこんなにたくさんあるとは思いませんでした。」
先生「それぞれ目的が違うからね。元の辞書を変えるのか、新しく作るのかが大事なんだ。」
生徒「updateとパイプ演算子の違いも、実例で見ると分かりやすかったです。」
先生「実際のプログラムでは、その違いを理解して使い分けることが重要になるよ。」
生徒「これから辞書を使うときは、結合方法も意識して書いてみます。」
先生「その意識があれば、Pythonのコードはもっと読みやすく、扱いやすくなるはずだよ。」