如何在python中合并同一关键字中具有多个值的词典

如何在python中合并同一关键字中具有多个值的词典,python,dictionary,merge,nested,Python,Dictionary,Merge,Nested,我在创建代码时遇到了一个小问题。我正在尝试合并Python中的两个词典。它们中的每一个都有一组键,比如: a={person_id:xx, address_id: xx, name:xx} b={address_id:xx, street:xx, postcode:xx, town:xx} 每一个都有许多条目,我的意思是它们看起来像: a={person_id:1. address_id:20, name:john; person_id:2, address_id:200, name:

我在创建代码时遇到了一个小问题。我正在尝试合并Python中的两个词典。它们中的每一个都有一组键,比如:

a={person_id:xx, address_id: xx, name:xx}
b={address_id:xx, street:xx, postcode:xx, town:xx}
每一个都有许多条目,我的意思是它们看起来像:

a={person_id:1. address_id:20, name:john; person_id:2, address_id:200, 
   name: mary';... and 10000 more entries like that}

b={address_id:20... same situation like in a}
我想得到:

merged_dic={person_id:xx, address_id {street:xx, postcode:xx, town:xx}, name:xx; person_id:xxx.. and so on}
我尝试了很多不同的东西,更新、defaultdict等等,但都没有成功。我不想覆盖内容,我只想创建某种嵌套的dict


有关如何继续的想法?

要合并dict,您可能需要尝试
dict.update()
方法,如:

代码: 测试代码: 结果:
要合并dict,您可能需要尝试
dict.update()
方法,如:

代码: 测试代码: 结果:
某种嵌套字典?这很模糊。抱歉,我的意思是,我想得到以合并的形式列出的所有10k值。{person\u id:xx,address\u id{street:xx,postcode:xx,town:xx},name:xx;person\u id:xxx..等等},我真的不知道如何正确地调用它,还是一个初学者,正在努力学习。Tbh无论我想做什么,它都不能正确地显示所有的值,或者覆盖它,或者只显示有限的数字,比如字典a的最后一个值,而不是所有的值。请您发布实际的Python数据结构文本(例如,dict中的分号是什么?)。你的
a
dict有重复的键,一个人不能c'n'p这个代码。我不理解你的字典,你应该多解释一下。嗨,是的,有多个重复的键(大约几千个条目),但两个字典中的值不同。某种嵌套字典?这很模糊。抱歉,我的意思是,我想得到以合并的形式列出的所有10k值。{person\u id:xx,address\u id{street:xx,postcode:xx,town:xx},name:xx;person\u id:xxx..等等},我真的不知道如何正确地调用它,还是一个初学者,正在努力学习。Tbh无论我想做什么,它都不能正确地显示所有的值,或者覆盖它,或者只显示有限的数字,比如字典a的最后一个值,而不是所有的值。请您发布实际的Python数据结构文本(例如,dict中的分号是什么?)。您的
a
dict有重复的键,无法复制此代码。我不理解您的字典,您应该进一步解释。您好,是的,有多个重复的键(大约几千个条目),但两个字典中的值不同。这是一个很好的选择,谢谢!但不幸的是,只有当dict没有具有不同值的重复键时,它才起作用,而这些重复键具有不同的值。我尝试了更新,它只显示了最后一个条目,我想获取所有条目。@Vesh,非常欢迎您。然而,在这种情况下,表达感谢的最好方式是对任何你觉得有用的问题或答案进行投票。对于你的问题,如果其中一个答案非常适合你的问题,你可以将其标记为已接受的答案。请参阅指南。这是一个不错的选择,谢谢!但不幸的是,只有当dict没有具有不同值的重复键时,它才起作用,而这些重复键具有不同的值。我尝试了更新,它只显示了最后一个条目,我想获取所有条目。@Vesh,非常欢迎您。然而,在这种情况下,表达感谢的最好方式是对任何你觉得有用的问题或答案进行投票。对于你的问题,如果其中一个答案非常适合你的问题,你可以将其标记为已接受的答案。有关指导原则,请参见。
def merge_my_dicts(a_dict, b_dict):
    # verify the addresses match
    assert b_dict['address_id'] == a_dict['address_id']

    # get a copy of the address dict and remove extra
    address = b_dict.copy()
    del address['address_id']

    # get a copy of the main dict, and update with the address
    new_dict = a_dict.copy()
    new_dict.update({'address_id': address})
    return new_dict
a = {'person_id': 'pid', 'address_id': 'aid', 'name': 'nm'}
b = {'address_id': 'aid', 'street': 'st', 'postcode': 'pc', 'town': 'tn'}
print(merge_my_dicts(a, b))
{
    'person_id': 'pid', 
    'address_id': {
        'street': 'st', 
        'postcode': 'pc', 
        'town': 'tn'},
    'name': 'nm'
}