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

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

Linda Hamilton
發布: 2024-11-06 17:30:03
原創
311 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板