首頁 >後端開發 >Python教學 >如何在保留現有值的同時更新 Python 中的巢狀字典?

如何在保留現有值的同時更新 Python 中的巢狀字典?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-09 06:35:02726瀏覽

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

更新巢狀字典並保留現有值

在Python 中,更新具有巢狀結構的字典可能很棘手,特別是當您想要合併值而無需覆蓋現有的。本問題探討如何使用 update 的內容更新巢狀字典dictionary1,同時保留 levelA 中的值。

原始方法中的缺陷

給定的Python 程式碼示範了一個常見錯誤:

dictionary1.update(update)

這個簡單的更新不會保留levelA,因為更新字典優先並且覆蓋level1 下的整個結構。

遞歸解決方案

答案中提供的解決方案建議採用遞歸方法,其中涉及:

  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中文網其他相關文章!

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