ホームページ > バックエンド開発 > Python チュートリアル > Python でネストされた辞書のディープ マージを実行するにはどうすればよいですか?

Python でネストされた辞書のディープ マージを実行するにはどうすればよいですか?

DDD
リリース: 2024-12-04 02:03:10
オリジナル
930 人が閲覧しました

How to Perform a Deep Merge of Nested Dictionaries in Python?

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

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