首頁 >後端開發 >Python教學 >如何在Python中有效率地合併嵌套字典?

如何在Python中有效率地合併嵌套字典?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-03 02:23:10675瀏覽

How Can I Efficiently Merge Nested Dictionaries in Python?

Python 合併巢狀字典

在 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 中存在該鍵並且兩個值都是字典,則它遞歸地合併兩個字典並更新路徑。
  • 如果鍵存在於 a 中但值不是字典,則會檢查衝突。如果偵測到衝突,則會引發異常。
  • 如果a中不存在該鍵,則將其與b中的值加到a中。

最後,合併回字典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中文網其他相關文章!

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