ホームページ >バックエンド開発 >Python チュートリアル >Python でネストされた辞書を効率的にマージするにはどうすればよいですか?

Python でネストされた辞書を効率的にマージするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-03 02:23:10720ブラウズ

How Can I Efficiently Merge Nested Dictionaries in Python?

Python でネストされた辞書を結合する

Python では、複数のネストされた辞書を結合する必要があるシナリオによく遭遇します。このタスクは、特に辞書の深さがさまざまで競合の可能性がある場合には困難になる可能性があります。

辞書間の辞書を結合して階層を維持するには、再帰関数を使用します。

def merge(a: dict, b: dict, path=[]):
    for key in b:
        if key in a:
            if isinstance(a[key], dict) and isinstance(b[key], dict):
                merge(a[key], b[key], path + [str(key)])
            elif a[key] != b[key]:
                raise Exception('Conflict at ' + '.'.join(path + [str(key)]))
        else:
            a[key] = b[key]
    return a

この関数は、2 つの辞書 a と b を、マージされた辞書内の現在のパスを追跡するためのオプションのパス パラメーターとともに受け入れます。 b の各キーを反復処理し、次のアクションを実行します。

  • キーが a に存在し、両方の値が辞書である場合、2 つの辞書を再帰的にマージし、パスを更新します。
  • キーが a に存在するが、値が辞書ではない場合、競合がないかチェックされます。競合が検出された場合は、例外が発生します。
  • キーが a に存在しない場合は、b の値を使用して a に追加されます。

最後に、マージされた辞書 a が返されます。

複数の辞書を結合するには、reduce を使用してすべての辞書を 1 つの辞書に結合します。 Dictionary:

from functools import reduce
reduce(merge, [dict1, dict2, dict3...])

この操作では、すべての辞書の内容がリストの最初の辞書に追加されます。

例:

dict1 = {1:{'a':{'A'}}, 2:{'b':{'B'}}}
dict2 = {2:{'c':{'C'}}, 3:{'d':{'D'}}}
print(merge(dict1, dict2))

# Output:
# {1:{'a':{'A'}}, 2:{'b':{'B'}, 'c':{'C'}}, 3:{'d':{'D'}}}

結果の辞書はdict1.

に保存されます。

以上がPython でネストされた辞書を効率的にマージするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。