在python中使用更新函数时,如果要合并两个词典,并且两个词典具有相同的键,则它们显然会被覆盖。
一个简单的例子:
simple_dict_one = {'name': "tom", 'age': 20}
simple_dict_two = {'name': "lisa", 'age': 17}
simple_dict_one.update(simple_dict_two)
在合并dicts之后,以下词典仍然存在:
{'age': 17, 'name': 'lisa'}
因此,如果你在两个dict中都有相同的密钥,那么只剩下一个(显然是最后一个)。 如果我有很多来源的名字,我可能想要每个人的临时字典,然后想把它添加到一个更大的字典。
有没有办法合并两个dicts并仍保留所有密钥?我想你只是假设有一个唯一的密钥,但是如何在不丢失数据的情况下合并两个dicts
答案 0 :(得分:1)
我有几个来源,我从中收集信息,例如 ldap数据库和其他我有python函数的源代码 创建一个临时字典,但我想要一个完整的字典 连接或显示从所有收集的所有信息 来源..所以我会有一个dict持有所有信息
你想要做的'合并'并不是很理想。正如你自己说的那样
我猜你只想拥有一个唯一的密钥
这使得在一个字典中收集所有信息变得相对而且不必要
你可以做什么,而不是在现有的字典上调用.update()
,而是添加一个子字典。它的关键可以是您从中收集信息的来源的名称。值可以是您从源接收的dict,如果您需要存储多个相同源的dict,则可以将它们存储在列表中。
实施例
>>> data = {}
>>> person_1 = {'name': 'lisa', 'age': 17}
>>> person_2 = {'name': 'tom', 'age': 20}
>>> data['people'] = [person_1, person_2]
>>> data
{'people': [{'age': 17, 'name': 'lisa'}, {'age': 20, 'name': 'tom'}]}
然后,只要您需要添加新收集的信息,只需在data
字典中添加新条目
>>> ldap_data = {'foo': 1, 'bar': 'baz'} # just some dummy data
>>> data['ldap_data'] = ldap_data
>>> data
{'people': [{'age': 17, 'name': 'lisa'}, {'age': 20, 'name': 'tom'}],
'ldap_data': {'foo': 1, 'bar': 'baz'}}
特定于源的数据可以从data
dict
>>> data['people']
[{'age': 17, 'name': 'lisa'}, {'age': 20, 'name': 'tom'}]
>>> data['ldap_data']
{'foo': 1, 'bar': 'baz'}