首頁 >後端開發 >Python教學 >如何在 Python 中執行巢狀字典的深度合併?

如何在 Python 中執行巢狀字典的深度合併?

DDD
DDD原創
2024-12-04 02:03:10925瀏覽

How to Perform a Deep Merge of Nested Dictionaries in Python?

Python 中字典的字典的深度合併

使用巢狀鍵合併多個字典可能是一項具有挑戰性的字典。讓我們考慮以下範例:

dict1 = {
    1: {"a": {"A"}},
    2: {"b": {"B"}}
}

dict2 = {
    2: {"c": {"C"}},
    3: {"d": {"D"}}
}

所需的輸出是:

dict3 = {
    1: {"a": {"A"}},
    2: {"b": {"B"}, "c": {"C"}},
    3: {"d": {"D"}}
}

為了實現這種深度合併,我們可以利用遞歸函數:

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)])
            else:
                a[key] = b[key]
        else:
            a[key] = b[key]

    return a

此函數採用兩個字典,a 和b,以及一個追蹤巢狀結構中目前位置的路徑。它遍歷 b 中的鍵並檢查 a 中是否存在相應的鍵。如果該鍵處的值都是字典,則它遞歸地呼叫合併函數來合併這些子字典。否則,它會使用 b 中的值來更新 a 中的值。

對於上面的範例字典,合併函數將產生所需的結果:

print(merge(dict1, dict2))

輸出將為:

{
    1: {'a': {'A'}},
    2: {'b': {'B'}, 'c': {'C'}},
    3: {'d': {'D'}}
}

注意:

注意:注意: >此函數會改變第一個字典a。如果您想保留其內容,可以在合併之前複製一份,例如 merge(dict(a), b)。

以上是如何在 Python 中執行巢狀字典的深度合併?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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