python 如何合并具有相同主键的两个嵌套字典

k4emjkb1  于 2023-01-04  发布在  Python
关注(0)|答案(2)|浏览(226)

我有两个具有相同主密钥的嵌套字典:

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中的键值对丰富dict1。
我可以用一个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'}}

......但是否有更深奥的方法来做到这一点--例如,使用法令理解?

dfuffjeb

dfuffjeb1#

有:

dict3 = {k: {**v, **dict2[k]} for k, v in dict1.items()}

首先,使用.items()同时迭代键和值。
然后,对于每个键k,您希望其值是通过转储(或解构)其中的vdict2[k]而创建的新dict。

    • Python更新〉= 3.9**:

感谢@mwo提到管道|操作数:

dict3 = {k: v | dict2[k] for k, v in dict1.items()}
wh6knrhe

wh6knrhe2#

如果您可以控制数据源,请展开字典,然后使用update方法。例如:

dict1 = {('person1', 'name'): 'John'}
dict2 = {('person1', 'weight'): 81.1}
dict1.update(dict2)
>>> dict1
{('person1', 'name'): 'John', 
 ('person1', 'weight'): 81.1}

处理这种数据结构要容易得多,但是如果您坚持使用嵌套字典,则可以使用NestedDict以类似的接口实现相同的结果。
一个二个一个一个
如果需要结果作为字典,请使用nd1.to_dict()
要安装ndictspip install ndicts

相关问题