如何在Python中添加字典到另一个字典中



我一直在尝试将我的一本字典添加到另一本字典中。我确实使用下面的代码做到了这一点,但是当我更新其中一个值时,所有具有相同名称的值也被更新。我该怎么修理它?

下面是我的代码:

test_dict = {'count': 0}
D = {'emp1': {'name': test_dict, 'job': 'Mgr'},
     'emp2': {'name': test_dict, 'job': 'Dev'},
     'emp3': {'name': test_dict, 'job': 'Dev'}}
D['emp1']['name']['count'] += 1
print(D)

输出如下

{emp1:{"名称":{"计数":1},"工作":"经理"},"emp2":{"名称":{"计数":1},"工作":"开发"},"emp3":{"名称":{"计数":1},"工作":‘开发’}}

当我应该得到这个的时候。我该怎么修理它?

{emp1:{"名称":{"计数":1},"工作":"经理"},"emp2":{"名称":{"计数":0},"工作":"开发"},"emp3":{"名称":{"计数":0},"工作":‘开发’}}

实际上在您的D字典中emp1, emp2和emp3都指向相同的引用(内存中的相同对象)。这就是为什么当您修改一个内部字典时,会看到其他字典也被修改了(实际上这始终是相同且唯一的字典)。你必须复制初始的test_dict

from copy import deepcopy
D = {'emp1': {'name': deepcopy(test_dict), 'job': 'Mgr'},
     'emp2': {'name': deepcopy(test_dict), 'job': 'Dev'},
     'emp3': {'name': deepcopy(test_dict), 'job': 'Dev'}}

这是因为每个emp键共享相同的字典对象(相同的id)。你必须用copy()

为每个emp做一个副本
test_dict = {'count': 0}

D = {'emp1': {'name': test_dict.copy(), 'job': 'Mgr'},
     'emp2': {'name': test_dict.copy(), 'job': 'Dev'},
     'emp3': {'name': test_dict.copy(), 'job': 'Dev'}}
D['emp1']['name']['count'] += 1
print(D)

输出:

{'emp1': {'name': {'count': 1}, 'job': 'Mgr'}, 'emp2': {'name': {'count': 0}, 'job': 'Dev'}, 'emp3': {'name': {'count': 0}, 'job': 'Dev'}}

最新更新