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

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

Mary-Kate Olsen
リリース: 2024-12-04 20:42:11
オリジナル
355 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート