我有兩個具有相同主鍵的嵌套字典:
dict1 = {'person1': {'name': 'John', 'sex': 'Male'},
'person2': {'name': 'Marie', 'sex': 'Female'},
'person3': {'name': 'Luna', 'sex': 'Female'},
'person4': {'name': 'Peter', 'sex': 'Male'}}
dict2 = {'person1': {'weight': '81.1', 'age': '27'},
'person2': {'weight': '56.7', 'age': '22'},
'person3': {'weight': '63.4', 'age': '24'},
'person4': {'weight': '79.1', 'age': '29'}}
所以我想通過dict2中的鍵值對來豐富dict 1。
我可以用 for 回圈來做到這一點......
for key in dict2:
dict2[key]['age'] = dict1[key]['age']
dict2[key]['weight'] = dict2[key]['weight']
結果:
dict2 = {'person1': {'name': 'John', 'sex': 'Male', 'weight': '81.1', 'age': '27'},
'person2': {'name': 'Marie', 'sex': 'Female', 'weight': '56.7', 'age': '22'},
'person3': {'name': 'Luna', 'sex': 'Female', 'weight': '63.4', 'age': '24'},
'person4': {'name': 'Peter', 'sex': 'Male', 'weight': '79.1', 'age': '29'}}
...但是有沒有更 Pythonic 的方式來做到這一點 - 例如用 dict 理解?
uj5u.com熱心網友回復:
是的:
dict3 = {k: {**v, **dict2[k]} for k, v in dict1.items()}
首先,用于.items()同時迭代鍵和值。
然后,對于每個鍵k,您希望其值是一個新的 dict,該 dict 是通過轉儲(或解構)兩者v和dict2[k]其中創建的。
Python >= 3.9 的更新:
感謝@mwo 提到管道|運算元:
dict3 = {k: v | dict2[k] for k, v in dict1.items()}
uj5u.com熱心網友回復:
如果您可以控制資料源,請展平字典,然后使用該update方法。例如:
dict1 = {('person1', 'name'): 'John'}
dict2 = {('person1', 'weight'): 81.1}
dict1.update(dict2)
>>> dict1
{('person1', 'name'): 'John',
('person1', 'weight'): 81.1}
處理這種資料結構要容易得多,但是如果你被嵌套字典卡住了,你可以使用 aNestedDict來實作具有相似介面的相同結果。
from ndicts.ndicts import NestedDict
nd1 = NestedDict(dict1)
nd2 = NestedDict(dict2)
nd1.update(nd2)
>>> nd1
NestedDict(
{'person1': {'name': 'John', 'weight': 81.1}}
)
如果nd1.to_dict()您需要將結果作為字典使用。
安裝ndicts pip install ndicts。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/449610.html
