ホームページ >バックエンド開発 >Python チュートリアル >Python で複数レベルの辞書を再帰的にマージするにはどうすればよいですか?

Python で複数レベルの辞書を再帰的にマージするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-04 20:42:11353ブラウズ

How Can I Recursively Merge Multi-Level Dictionaries in Python?

マルチレベル辞書を深くマージする

Python では、不明なネストの深さを維持しながら辞書を再帰的にマージするのは困難な場合があります。この問題に対処する解決策は次のとおりです。

def deep_merge(a: dict, b: dict, path=[]):
    for key in b:
        if key in a:
            if isinstance(a[key], dict) and isinstance(b[key], dict):
                deep_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 つの辞書を入力として受け取り、それらの内容を再帰的にマージします。現在のネスト レベルを追跡するパスを維持し、競合が発生した場合により正確なエラー メッセージを提供します。

例:

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

print(result)
# {1:{'a':{'A'}}, 2:{'b':{'B'}, 'c':{'C'}}, 3:{'d':{'D'}}}

deep_merge は最初の引数を変更することに注意してください。これが結果の理由です。結合された辞書が含まれています。

複数の辞書を変更せずに結合するには、キーワードとして渡します。引数:

from functools import reduce
result = reduce(deep_merge, [dict1, dict2, ...], {})

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

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