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

既存の値を保持しながら Python でネストされた辞書を更新するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-09 06:35:02709ブラウズ

How to Update Nested Dictionaries in Python while Preserving Existing Values?

既存の値を保持したネストされた辞書の更新

Python では、特に値を結合せずに値をマージする場合、ネストされた構造を持つ辞書の更新は難しい場合があります。既存のものを上書きします。この質問では、levelA の値を保持しながら、ネストされた辞書 Dictionary1 を更新の内容で更新する方法を検討します。

元のアプローチの欠陥

指定された Python コードは、一般的な間違いを示しています。

dictionary1.update(update)

この単純な更新では、レベル A が保持されません。これは、更新辞書が優先され、レベル 1 の下の構造全体が上書きされるためです。

再帰的ソリューション

回答で提供されている解決策は、次のことを含む再帰的アプローチを提案しています。

  1. 更新辞書内のキーと値を反復処理します。
  2. 値が(別の辞書) をマッピングし、元の辞書内の対応するサブ辞書の更新を再帰的に呼び出します。
  3. それ以外の場合は、通常どおり値を更新します。

更新されたコード

提案された回答に基づいて改善されたコードは次のとおりです:

def update(d, u):
    for k, v in u.items():
        if isinstance(v, collections.abc.Mapping):
            d[k] = update(d.get(k, {}), v)
        else:
            d[k] = v
    return d

dictionary1 = {
    "level1": {
        "level2": {"levelA": 0, "levelB": 1}
    }
}
update = {
    "level1": {
        "level2": {"levelB": 10}
    }
}
updated_dict = update(dictionary1, update)
print(updated_dict)

出力

{'level1': {'level2': {'levelA': 0, 'levelB': 10}}}

説明

このソリューションは、ネストされた辞書を再帰的に更新し、既存の levelA の値を保持しながら、期待どおり levelB の下の値を更新します。

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

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