dict.update会覆盖现有密钥,如何避免?

时间:2014-10-22 11:01:24

标签: python dictionary

在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

1 个答案:

答案 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'}