我需要合并兩個字典(多級),它們(以非常簡化的形式)像
a = {'a' : {'b' : '1'}}
b = {'a' : {'c' : '2'}}
結果應該是
x = {'a' : {'b: '1', 'c' : '2' }}
Python (3.9) 是否提供了以所需方式合并它們的函式?或者這可以在故障保存程序中完成嗎?
實際資料有多個不同長度的級別。
提前致謝。
uj5u.com熱心網友回復:
由于您沒有提供示例,因此您的問題太模糊了“多級”的含義。但是對于您顯示的內容,以下內容將適用key于字典a和字典共有的每個鍵 ,并使用字典b更新a[key]字典b[key]。當然,這假設鍵值是字典。
from copy import deepcopy
a = {'a': {'b': '1'}}
b = {'a': {'c': '2'}, 'f': {'d': '3'}}
x = deepcopy(a)
for key in b.keys():
if key in x:
x[key].update(b[key])
else:
x[key] = b[key]
print(x)
印刷:
{'a': {'b': '1', 'c': '2'}, 'f': {'d': '3'}}
方法是dict.update解決方案的關鍵(請原諒雙關語)。如果通過多級您的意思是字典值是字典,其值也是字典,那么您將需要一個遞回演算法。
uj5u.com熱心網友回復:
a = {'a' : {'b' : '1'}}
b = {'a' : {'c' : '2'}}
aset = set(a)
bset = set(b)
c=dict()
#first common keys
for name in aset.intersection(bset):
c[name]=dict(a[name], **b[name])
#keys in a but not in b
for name in aset-bset:
c[name]=a[name]
#keys in b but not in a
for name in bset-aset:
c[name]=b[name]
#print fully merged c
print(c)
>>> {'a': {'b': '1', 'c': '2'}}
我使用集合來簡化查找常用鍵等,你可以檢查這個問題。
在一個更完整的例子中:
a = {'a' : {'b' : '1'},'e':{'l':'2'},'f':{'x':'10'}}
b = {'a' : {'c' : '2'},'e':{'i':'2'},'g':{'z':'12'}}
aset = set(a)
bset = set(b)
c=dict()
for name in aset.intersection(bset):
c[name]=dict(a[name], **b[name])
for name in aset-bset:
c[name]=a[name]
for name in bset-aset:
c[name]=b[name]
print(c)
>>> {'a': {'b': '1', 'c': '2'}, 'e': {'l': '2', 'i': '2'}, 'f': {'x': '10'}, 'g': {'z': '12'}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/436885.html
