ホームページ >バックエンド開発 >Python チュートリアル >さまざまな深さで特定の値を保持しながら、Python でネストされた辞書を更新するにはどうすればよいですか?
深さを保持したネストされた辞書の更新
Python では、特にその内容をマージする場合、ネストされた辞書の更新は難しい場合があります。異なる深さで特定の値を保持しながら、別の辞書を作成します。次のシナリオを考えてみましょう:
dictionary1 と update という 2 つの辞書がある場合、他のすべての値を更新しながら、最深レベルの特定の値 (例: "levelA") を上書きせずに、description1 を update の内容で更新するにはどうすればよいでしょうか。 ?
dictionary1 = { "level1": { "level2": {"levelA": 0, "levelB": 1} } } update = { "level1": { "level2": {"levelB": 10} } }
単純に update メソッドを使用すると、「level2」サブディクショナリ全体が上書きされ、「levelA」値が失われます。
dictionary1.update(update) print(dictionary1)
{ "level1": { "level2": {"levelB": 10} } }
この課題に取り組むには、辞書の可変の深さを考慮し、値を適切にマージする再帰的ソリューションが必要です。
再帰的ソリューション:
次のコードは、再帰的な「部分更新」を実装します。指定されたキーを上書きせずに辞書の値を更新する関数:
import copy def partial_update(d, u, preserve): for k, v in u.items(): if isinstance(v, dict): if d.get(k, None) is None: d[k] = copy.deepcopy(v) else: partial_update(d[k], v, preserve) elif k in preserve: continue else: d[k] = copy.deepcopy(v) return d
partial_update 関数は 3 つの引数を取ります:
この例で「levelA」値を保持するには、次のコードを使用できます。
partial_update(dictionary1, update, ["levelA"]) print(dictionary1)
{ "level1": { "level2": {"levelA": 0, "levelB": 10} } }
このソリューションでは、予期しない変更を防ぐために、更新する前に辞書のコピーを作成します。これにより、部分的な更新後でも、元の辞書がそのまま残ることが保証されます。
以上がさまざまな深さで特定の値を保持しながら、Python でネストされた辞書を更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。