【Python】dict(辞書)の結合方法を初心者向けにわかりやすく解説

はじめに

Pythonでは、情報をキーと値のペアで管理したい場合に辞書(dict)をよく使います。

例えばユーザーの情報を扱う場合や、設定ファイルの内容をコード上で管理したいときなど、さまざまな場面でdictが活躍するでしょう。

一方で、複数の辞書をまとめて管理したい状況も珍しくありません。

こうしたときに役立つのが、辞書の結合です。

いくつか方法がありますので、どのやり方が良いのかを整理しておくと便利です。

今回は初心者の方にもわかりやすいように解説しますので、ぜひ参考にしてみてください。

この記事を読むとわかること

  • dictの結合が必要になる具体的なシチュエーション
  • Pythonで辞書を結合する複数の方法 (update、演算子など)
  • 実務での活用イメージと、それぞれのメリット・デメリット
  • dict結合にまつわるよくある疑問や注意点

Pythonのdict結合とは何か?

Pythonで作成した複数の辞書をひとつの辞書にまとめる作業を、ここでは「dictの結合」と呼びます。

これは情報を統合する際にとても便利です。

例えばECサイトの注文情報や在庫情報など、関連するデータをまとめて扱いたい場合に使われます。

同じキーが複数の辞書に含まれる可能性もあるため、単に「足し合わせる」だけではなく、キーが重複する場合の扱いなどを意識しておく必要があります。

実務の現場では、APIから受け取ったJSONをPythonで処理するときに辞書を結合して一つのオブジェクトとして使うことも多いです。

また、アプリケーションの設定を複数のファイルから読み込んで、それらを一度にまとめるといった操作にも便利です。

dictを結合するときに考えるべきポイント

dictを結合する方法はいくつかありますが、どれを選ぶか迷うことは多いかもしれません。

それぞれの方法には次のような特徴があります。

コードの読みやすさ

どのメソッドや演算子を使うかによって、コードが短くなるかどうかが変わります。

キーの重複時の扱い

同じキーが複数のdictに含まれるときに、どの値を優先するのかをしっかり把握する必要があります。

処理速度やメモリの使い方

大量のデータを扱う場合は、結合方法によってパフォーマンスが変わることがあります。

たとえば、社内向けツールや小規模なデータなら処理速度はそれほど問題にならないかもしれませんが、ECサイトのようにデータ量が多いシステムでは効率的な方法を選びたいところです。

update()メソッドを使ったdict結合

最初に紹介するのは、update() メソッドを利用する方法です。

ある辞書がもともと持っているデータに、新しい辞書の内容を上書きする形で結合します。

update()の基本的な使い方

dict_a = {"apple": 3, "banana": 5}
dict_b = {"banana": 10, "orange": 2}

dict_a.update(dict_b)
print(dict_a)  # {'apple': 3, 'banana': 10, 'orange': 2}

dict_a.update(dict_b) の実行後、dict_a は元々のキーと値に加えて、dict_b の要素が結合されたものになります。

注意したいのは、すでに存在するキーがあるとその値が上書きされる点です。

上の例では banana が重複していますが、dict_b の値が優先され、最終的に banana: 10 となっています。

実務での使用例

例えば、Aという設定ファイルから読み込んだ情報を dict_a に、Bという設定ファイルから読み込んだ情報を dict_b に格納したとしましょう。

システム全体で使う設定を一元化したいので、dict_a の内容をベースにしつつ、後から読み込んだ dict_b の内容を優先して反映させたいという場面はよくあります。

そんなときは dict_a.update(dict_b) を実行すると、一瞬で反映が完了します。

既存のデータを上書きする動きがあるため「後から読み込むデータが最新情報」というケースに向いているでしょう。

**演算子による辞書の結合(辞書のアンパック)

Pythonでは ** 演算子(アンパック演算子)を使って辞書を一つにまとめることができます。

2つ以上の辞書をまとめたいときは、このアンパック演算子を複数にわたって利用します。

**演算子の基本的な使い方

dict_a = {"apple": 3, "banana": 5}
dict_b = {"banana": 10, "orange": 2}

merged_dict = {**dict_a, **dict_b}
print(merged_dict)  # {'apple': 3, 'banana': 10, 'orange': 2}

このように、merged_dict に対して **dict_a**dict_b を書くと、両方のキーと値を解きほぐして、一つの辞書にまとめてくれます。

こちらの場合も、キーが重複すると後から書かれた辞書の値が優先されます。

実務での使用例

例えばウェブアプリケーションでユーザーのプロフィール情報を扱うとき、基本情報を持つ dict_a と、追加情報を持つ dict_b をまとめて一度に表示したい場面があります。

例えば dict_a が「ユーザーの名前やメールアドレス」、dict_b が「ユーザーの購入履歴などの拡張データ」といった形です。

このとき {**dict_a, **dict_b} で一つの大きな辞書にまとめることができれば、テンプレートエンジンやAPIのレスポンスデータとして一括で扱いやすくなるでしょう。

| 演算子を使ったdict結合

もう一つの方法として、| 演算子を使う方法があります。

これは2つの辞書を結合して、新しい辞書を作り出します。

| 演算子の基本的な使い方

dict_a = {"apple": 3, "banana": 5}
dict_b = {"banana": 10, "orange": 2}

merged_dict = dict_a | dict_b
print(merged_dict)  # {'apple': 3, 'banana': 10, 'orange': 2}

結果としては update() メソッドや ** 演算子の場合と似ていますが、この方法では元の辞書 dict_a は書き換わりません。

あくまでも新たに作られた辞書を merged_dict に代入している点が特徴です。

実務での使用例

例えば、ユーザー情報を持つ dict_a と追加設定を持つ dict_b を結合して使いたいけれど、dict_a 自体は保持しておきたいケースです。

| を使うことで、元の dict_a は変更されずに、新しい辞書として合成結果を取り出すことができます。

既存の構造を変えたくないが、合成した結果を一時的に扱いたいときには便利でしょう。

結合方法ごとの特徴と上手な使い分け

ここまで紹介した update(), **, | には、いずれも「重複するキーがあれば後から追加した方が優先」という共通点があります。

ただし、次のような細かな違いがあります。

  • update()
    • 元の辞書が書き換わる
    • 既存データを上書きするシーンで便利
  • ** 演算子
    • 新しい辞書を作る
    • 2つ以上の辞書を一気にまとめるときに書きやすい
  • | 演算子
    • 新しい辞書を作る
    • 既存の辞書を保持したまま作業できる

どれも便利な手段なので、「元の辞書をそのままにしておきたいのか、それとも上書きして良いのか」という設計方針に合わせて選ぶと良いでしょう。

実務での活用シーン

ここからは、実際に仕事でdict結合が使われる場面を見てみます。

複数のAPIレスポンスを統合する

Webサービスを作るとき、他社APIや自社内のマイクロサービスから複数のJSONが返されることがあります。

レスポンスの一部を抜き出して必要な情報だけを辞書にまとめるケースです。

  • メインの情報 : dict_main
  • サブの情報 : dict_sub

それぞれを一括で表現するために、dict_main.update(dict_sub) とすれば、あとでフロントエンドに返す際にも扱いやすくなります。

もし既存の dict_main を残したいなら、dict_main | dict_sub で新しい辞書を生成する方が良いかもしれません。

アプリの設定値を上書きする

アプリケーションの中で、デフォルト設定とユーザーがカスタマイズした設定をまとめて扱うことがあります。

  • デフォルト設定 : default_config
  • ユーザー設定 : user_config

この場合、デフォルト設定にユーザー設定を上書きする流れが自然です。

default_config.update(user_config) と書くと、ユーザー側の値を優先した設定を得られます。

更新前の設定を残す必要がなければ、簡潔に記述できる点が魅力です。

取り込み時に値をチェックする

辞書同士を結合するときに、キーによっては意図しない値が上書きされてしまうことがあります。

実務では、「このキーが重複した場合には警告を出す」といったロジックを加えたい場面もあるでしょう。

そうした場合には、単純に dict_a.update(dict_b) する前に、キーの重複をチェックする仕組みを用意すると安心です。

あるいは結合して新辞書を作る方法を選んでから、想定外のキーがないか判定するなど、運用上の工夫が考えられます。

dict結合は一見単純に見えますが、上書きの有無やデータ整合性など、事前に方針を決めておくことが重要です。

よくある疑問と注意点

初心者の皆さんが戸惑いがちなポイントとして、次のような疑問があります。

同じキーがあった場合はどちらが優先されるのか?

→ 後から結合する方が優先されます。

順番を保つ必要はあるのか?

→ Pythonの辞書は、保持している要素の追加順を維持します。結合の前後で順番をどう扱いたいか、意識しておくと混乱を防げます。

キーをまたいでまとめたいときは?

→ 例えば、全く別の構造に再編したい場合は、単純な辞書結合だけではなく、複数の辞書を巡回して新しい形を作る方法を検討した方が柔軟です。

dict結合を行うときは、上書きされるデータやキーの重複に十分注意しましょう。特に本番環境のデータを扱う場合は、予期せぬ値の上書きがないか検証が大切です。

まとめ

今回はPythonの辞書を結合する方法について解説しました。

いくつかの手段を紹介しましたが、ポイントは以下のとおりです。

  • update() : 元の辞書を直接更新してしまうため、上書きが必要な場面に向いています。
  • **演算子 : 新しい辞書を作るので、複数の辞書を一度にまとめたいときにも便利です。
  • |演算子 : 元の辞書を保持しつつ、新しい辞書を得たいときに使いやすいでしょう。

いずれにしても、キーが重複したときは後からマージした方の値が優先されるという共通のルールがあります。

同じキーが複数の辞書に含まれているときには、あらかじめコンフリクトが発生しないよう設計しておくことが大切です。

実務においては、APIレスポンスの統合やアプリケーション設定の上書きなど、辞書を結合する場面は珍しくありません。

そのため「元のデータを保持したままにしたいのか」「後から読み込む情報を優先させたいのか」など、用途に合った結合方法を使い分けてみてください。

これらの方法を習得しておけば、現場でのPython開発がよりスムーズに進むでしょう。

Pythonをマスターしよう

この記事で学んだPythonの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。