【Python】2つの辞書をマージ(結合)する方法:updateメソッドとdict関数の活用

Pythonで2つの辞書(dictionary)を結合して1つにまとめたい場合、元の辞書を更新する「破壊的」な方法と、新しい辞書を作成する「非破壊的」な方法があります。

それぞれの実装方法と、キーが重複した場合の挙動について解説します。

目次

1. update() メソッド:既存の辞書を更新(破壊的)

dict.update() メソッドを使用すると、呼び出し元の辞書に別の辞書の内容が追加されます。 キーが重複している場合、引数で渡した辞書の値で上書きされます。

実装例:アプリケーション設定の反映

デフォルト設定(default_config)に対して、ユーザー設定(user_preference)を上書きマージするシナリオです。

# アプリケーションのデフォルト設定
default_config = {
    "theme": "light",
    "notifications": True,
    "version": "1.0.0"
}

# ユーザーが変更したい設定項目(重複キーあり)
# theme は "dark" に上書きされ、language が新規追加されます
user_preference = {
    "theme": "dark",
    "language": "ja"
}

print("--- update実行前 ---")
print(f"Default: {default_config}")

# default_config 自体を書き換えてマージを実行
default_config.update(user_preference)

print("\n--- update実行後 ---")
print(f"Merged : {default_config}")

実行結果

--- update実行前 ---
Default: {'theme': 'light', 'notifications': True, 'version': '1.0.0'}

--- update実行後 ---
Merged : {'theme': 'dark', 'notifications': True, 'version': '1.0.0', 'language': 'ja'}

2. dict() コンストラクタや演算子:新しい辞書を作成(非破壊的)

元の辞書を残したまま、マージされた新しい辞書を作成したい場合は、dict() コンストラクタとアンパック(**)を使用するか、Python 3.9以降であればマージ演算子 | を使用します。

実装例:設定の統合(非破壊的)

default_config = {"theme": "light", "notifications": True}
user_preference = {"theme": "dark", "language": "ja"}

# 方法A: dict() とアンパックを使用(Python 3.5以降)
# 両方の辞書を展開して、新しい辞書を作成します。後勝ち(user_preference優先)です。
merged_config_v1 = dict(**default_config, **user_preference)

# 方法B: マージ演算子 | を使用(Python 3.9以降推奨)
# 直感的で読みやすい記法です。
merged_config_v2 = default_config | user_preference

print("--- 新しい辞書を作成 ---")
print(f"Merged V1: {merged_config_v1}")
print(f"Merged V2: {merged_config_v2}")

# 元の辞書は変更されていません
print("\n--- 元の辞書への影響なし ---")
print(f"Default: {default_config}")

実行結果

--- 新しい辞書を作成 ---
Merged V1: {'theme': 'dark', 'notifications': True, 'language': 'ja'}
Merged V2: {'theme': 'dark', 'notifications': True, 'language': 'ja'}

--- 元の辞書への影響なし ---
Default: {'theme': 'light', 'notifications': True}

まとめ

  • d1.update(d2): d1 自体を変更したい場合に使用します。
  • dict(**d1, **d2) または d1 | d2: 元の辞書を保持しつつ、新しい辞書を作りたい場合に使用します。

いずれの場合も、重複したキーは「後から追加した辞書(引数側)」の値が優先される点に注意してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次