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

Python dict.update覆盖现有密钥,如何避免?,python,dictionary,Python,Dictionary,在python中使用字典更新函数时,如果要合并两个字典,并且这两个字典具有相同的键,那么它们显然会被覆盖 一个简单的例子: simple_dict_one = {'name': "tom", 'age': 20} simple_dict_two = {'name': "lisa", 'age': 17} simple_dict_one.update(simple_dict_two) 合并dict后,仍保留以下dict: {'age': 17, 'name': 'lisa'} 因此,如果两个d

在python中使用字典更新函数时,如果要合并两个字典,并且这两个字典具有相同的键,那么它们显然会被覆盖

一个简单的例子:

simple_dict_one = {'name': "tom", 'age': 20}
simple_dict_two = {'name': "lisa", 'age': 17}
simple_dict_one.update(simple_dict_two)
合并dict后,仍保留以下dict:

{'age': 17, 'name': 'lisa'}
因此,如果两个dict中的密钥相同,则只剩下一个(显然是最后一个)。 如果我有很多关于几个来源的名字,我可能想从每个来源中得到一个临时的dict,然后把它添加到一个更大的dict中

有没有办法合并两个dict并保留所有的键?我想你只需要有一个唯一的密钥,但是我如何合并两个dict而不丢失数据呢


嗯,我有几个收集信息的来源,例如 ldap数据库和其他源代码,其中我有python函数 每个都创建一个临时记录,但我希望最后有一个完整的记录 排序连接或显示从所有数据库收集的所有信息 来源。。所以我会让一个口授记录所有的信息

您试图用“合并”来做的事情并不十分理想。就像你自己说的

我想你应该只有一把唯一的钥匙

这使得在一个目录中收集所有信息变得相对困难,这是不必要的。
您可以做的不是在现有dict上调用
.update()
,而是添加一个子dict。它的键可以是您从中收集信息的源的名称。该值可以是从源接收的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
dict

>>> 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['people']
[{'age': 17, 'name': 'lisa'}, {'age': 20, 'name': 'tom'}]

>>> data['ldap_data']
{'foo': 1, 'bar': 'baz'}
源特定数据很容易从
数据中提取

>>> 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['people']
[{'age': 17, 'name': 'lisa'}, {'age': 20, 'name': 'tom'}]

>>> data['ldap_data']
{'foo': 1, 'bar': 'baz'}

看起来您要做的不是合并两个词典。你为每个人准备了一本字典,上面有姓名和年龄的键。如果将它们合并,则会丢失属于同一个人的姓名和年龄之间的关联。你到底想做什么?你想要的输出是什么?我有几个收集信息的来源,例如ldap数据库和其他来源,其中我有python函数,每个函数都创建一个临时dict,但我希望最后有一个完整的dict,可以连接或显示从所有来源收集的所有信息。。所以我会让一个dict保存所有的信息,你有什么理由不想在dict列表中包含这些信息吗?嗯,这很有趣,我甚至没有想到,这很好,而且可能更容易,更好,更像pythonic?