Python での辞書間の辞書のディープ マージ
ネストされたキーを持つ複数の辞書をマージするのは、困難な作業になる場合があります。次の例を考えてみましょう:
dict1 = { 1: {"a": {"A"}}, 2: {"b": {"B"}} } dict2 = { 2: {"c": {"C"}}, 3: {"d": {"D"}} }
必要な出力は次のとおりです:
dict3 = { 1: {"a": {"A"}}, 2: {"b": {"B"}, "c": {"C"}}, 3: {"d": {"D"}} }
この深いマージを実現するには、再帰関数を利用できます:
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)]) else: a[key] = b[key] else: a[key] = b[key] return a
この関数は、a と b の 2 つの辞書と、入れ子構造内の現在の位置を追跡するパスを受け取ります。 b のキーを反復処理し、対応するキーが a に存在するかどうかを確認します。そのキーの値が両方とも辞書である場合、マージ関数を再帰的に呼び出して、それらのサブ辞書をマージします。それ以外の場合は、a の値を b の値で更新します。
上記の辞書の例では、マージ関数は目的の結果を生成します。
print(merge(dict1, dict2))
出力は次のようになります。
{ 1: {'a': {'A'}}, 2: {'b': {'B'}, 'c': {'C'}}, 3: {'d': {'D'}} }
注: この関数は、最初の辞書 a を変更します。内容を保持したい場合は、マージする前にコピーを作成できます (例: merge(dict(a), b))。
以上がPython でネストされた辞書のディープ マージを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。