首頁 >後端開發 >Python教學 >如何在保留特定鍵值對的同時更新巢狀字典?

如何在保留特定鍵值對的同時更新巢狀字典?

Linda Hamilton
Linda Hamilton原創
2024-11-06 17:30:03312瀏覽

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}
    }
}

使用標準更新方法會覆蓋字典1中現有的“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
    }
}

此解決方案有效更新「levelB」值,同時保留原始字典中的「levelA」值。它處理不同深度的巢狀字典,確保在更新過程中保留特定的鍵值對。

以上是如何在保留特定鍵值對的同時更新巢狀字典?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn