具有深度保留的巢狀字典更新
在Python 中,更新巢狀字典可能很棘手,特別是當您想要將其內容與另一個字典,同時保留不同深度的特定值。考慮以下場景:
給定兩個字典,dictionary1 和update,我們如何使用update 的內容更新dictionary1,而不覆蓋最深級別的特定值(例如“levelA”),同時更新所有其他值?
dictionary1 = { "level1": { "level2": {"levelA": 0, "levelB": 1} } } update = { "level1": { "level2": {"levelB": 10} } }
如果我們簡單地使用update 方法,它會覆蓋整個“level2”子詞典,丟失“levelA” value:
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 函數有三個參數:
要保留範例中的「levelA」值,我們可以使用以下程式碼:
partial_update(dictionary1, update, ["levelA"]) print(dictionary1)
{ "level1": { "level2": {"levelA": 0, "levelB": 10} } }
在此解決方案中,我們複製更新之前檢查字典以防止意外修改。這確保了即使在部分更新後原始詞典也保持不變。
以上是如何在 Python 中更新巢狀字典,同時保留不同深度的特定值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!