ホームページ >バックエンド開発 >Python チュートリアル >特定のキーと値のペアを保持しながらネストされた辞書を更新するにはどうすればよいですか?

特定のキーと値のペアを保持しながらネストされた辞書を更新するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-06 17:30:03306ブラウズ

How to Update a Nested Dictionary While Preserving Specific Key-Value Pairs?

深さが異なるネストされた辞書の更新

ネストされた辞書 (dictionary1) を別のネストされた辞書の内容でシームレスに更新するには (更新)特定のキーと値のペアを保持しながら、辞書のさまざまな深さを考慮した再帰的ソリューションを採用する必要があります。

次のシナリオ例を考えてみましょう:

更新前:

dictionary1 = {
    "level1": {
        "level2": {"levelA": 0, "levelB": 1}
    }
}

update = {
    "level1": {
        "level2": {"levelB": 10}
    }
}

標準の更新方法を使用すると、dictionary1 の既存の「level2」値が上書きされ、次のようになります。

dictionary1.update(update)
print(dictionary1)
{
    "level1": {
        "level2": {"levelB": 10}  # "levelA" is lost
    }
}

再帰的解決策:

この保存要件に対処するために、次の Python コードは再帰的ソリューションを提供します。

import copy

def update_dictionary(d, u):
    for k, v in u.items():
        if isinstance(v, dict):
            # If the value is a dictionary, recursively update
            d[k] = update_dictionary(d.get(k, {}), v)
        else:
            # If the value is not a dictionary, simply update
            d[k] = copy.deepcopy(v)
    return d

このソリューションは、インプレース更新を防ぐために、元の辞書 1 のディープ コピーを作成します。次に、更新辞書 (u) を反復処理し、d の対応する値を再帰的に更新します。値が辞書の場合、再帰が継続されます。それ以外の場合は、値を直接更新します。

使用法:

このソリューションを前の例に適用すると、

result = update_dictionary(dictionary1, update)
print(result)

結果:

{
    "level1": {
        "level2": {"levelA": 0, "levelB": 10}  # "levelA" preserved
    }
}

このソリューションは、元の辞書の「levelA」値を保持しながら、「levelB」値を効果的に更新します。さまざまな深さのネストされた辞書を処理し、更新プロセス中に特定のキーと値のペアが確実に保持されるようにします。

以上が特定のキーと値のペアを保持しながらネストされた辞書を更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。