我正在python列表中创建一个字典。
>>> my_dict=[dict()]*2
>>> my_dict[0]['name']='TAMIL'
>>> my_dict[0]
{'name': 'TAMIL'}
>>> my_dict
[{'name': 'TAMIL'}, {'name': 'TAMIL'}]
它以my_dict[1]['name']
的相同值更新my_dict[0]['name']
如何避免这种情况,在我的情况下我想要
访问和更新每个字典键。
答案 0 :(得分:1)
您正在为同一个对象而不是两个不同的对象创建两个引用,使用range来实际创建n
个不同的词组:
my_dict=[{} for _ in range(2)]
正如我之前提到的那样my_dict=[dict()]*2
创建引用同一个对象my_dict[0] is my_dict[1]
。
n [2]: my_dict = [dict()] * 2
In [3]: id(my_dict[0])
Out[3]: 140220584402056
In [4]: id(my_dict[1]) # same id, same object
Out[4]: 140220584402056
In [5]: my_dict=[{} for _ in range(2)]
In [6]: id(my_dict[0])
Out[6]: 140220898678728
In [7]: id(my_dict[1]) # different id, different object
Out[7]: 140220579542088
答案 1 :(得分:-1)
你最好这样做: my_dict [0] = {'name':'Tamil'}
这只更新字典中的第一个元素。另一个人将是空的。
编辑**
以上答案解释了一件我不知道的重要事情。所以绝对是更好的答案。我给了这个,因为它似乎解决了你的问题:
>>> my_dict=[dict()]*2
>>> my_dict
[{}, {}]
>>> my_dict[0]= {'name':'Tamil'}
>>> my_dict
[{'name': 'Tamil'}, {}]