更新不同深度的巢狀字典
使用另一個巢狀字典的內容無縫更新巢狀字典(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中文網其他相關文章!