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中文網其他相關文章!