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 が返されます。
複数の辞書を結合するには、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 サイトの他の関連記事を参照してください。