ホームページ >バックエンド開発 >Python チュートリアル >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 サイトの他の関連記事を参照してください。