ホームページ >バックエンド開発 >Python チュートリアル >中間キーを上書きせずにPythonでネストされた辞書を更新する方法?

中間キーを上書きせずにPythonでネストされた辞書を更新する方法?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-06 21:54:02419ブラウズ

How to Update Nested Dictionaries in Python Without Overwriting Intermediate Keys?

中間キーを上書きせずにネストされた辞書を更新する

ネストされた辞書を操作する場合、多くの場合、他のレベルに影響を与えずに特定のキーを更新する必要があります。ただし、Python の標準的な更新方法では、同じレベルのすべてのキーが上書きされるため、この目標を達成することが困難になります。

再帰的アプローチ

再帰的アプローチは、この問題に効果的に対処できます。辞書を再帰的に走査することで、既存の構造を維持しながら、適切な深さでキーを識別して更新できます。

たとえば、次の再帰関数を使用すると、levelA を上書きせずに、更新の内容を Dictionary1 に更新できます。

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

この関数では、v が辞書であるかどうかを確認し、適切なサブ辞書を使用して update を再帰的に呼び出します。 v が辞書でない場合は、d 内の対応するキーを単純に更新します。これにより、中間キーが上書きされなくなります。

使用例

次の例を考えてみましょう:

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

updated_dictionary = update(dictionary1, update)
print(updated_dictionary)

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

ご覧のとおり、levelA は更新された辞書に保持されます。更新に levelB の値が含まれているにもかかわらず。これは、再帰的アプローチの有効性を示しています。

以上が中間キーを上書きせずにPythonでネストされた辞書を更新する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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