在 Python 中,我們常常會遇到需要組合多個巢狀字典的場景。這項任務可能具有挑戰性,特別是當字典具有不同程度的深度和潛在衝突時。
為了合併字典的字典並維護層次結構,我們使用遞歸函數:
def merge(a: dict, b: dict, path=[]): for key in b: if key in a: if isinstance(a[key], dict) and isinstance(b[key], dict): merge(a[key], b[key], path + [str(key)]) elif a[key] != b[key]: raise Exception('Conflict at ' + '.'.join(path + [str(key)])) else: a[key] = b[key] return a
此函數接受兩個字典a 和b,以及一個可選的路徑參數,用於追蹤合併字典中的目前路徑。它迭代 b 中的每個鍵並執行以下操作:
最後,合併回字典a。
要合併多個字典,可以使用reduce將所有字典合併為一個字典字典:
from functools import reduce reduce(merge, [dict1, dict2, dict3...])
此操作會將所有字典的內容新增至清單中的第一個字典中。
範例:
dict1 = {1:{'a':{'A'}}, 2:{'b':{'B'}}} dict2 = {2:{'c':{'C'}}, 3:{'d':{'D'}}} print(merge(dict1, dict2)) # Output: # {1:{'a':{'A'}}, 2:{'b':{'B'}, 'c':{'C'}}, 3:{'d':{'D'}}}
請注意,產生的字典儲存在 dict1 中。
以上是如何在Python中有效率地合併嵌套字典?的詳細內容。更多資訊請關注PHP中文網其他相關文章!