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