问题在标题中。我不能让它发挥作用:
>>> data = [{}] * 2
>>> data[1].update({3:4})
>>> data
[{3: 4}, {3: 4}]
键值对添加到数组的所有元素。我希望收到:
[{}, {3: 4}]
答案 0 :(得分:2)
问题在于
data = [{}] * 2
创建一个列表,其中包含两次相同的字典。
为了说明这一点,让我们看看id(data[0])
和id(data[1])
:
>>> data = [{}] * 2
>>> data
[{}, {}]
>>> id(data[0])
4490760552
>>> id(data[1])
4490760552
请注意,id(data [0])和id(data [1])是相同的,因为列表中的两个条目都引用同一个对象
你可能想要的是
>>> d2 = [{} for i in range(2)]
>>> d2[0][4] = 'a'
>>> d2
[{4: 'a'}, {}]
答案 1 :(得分:0)
问题是,您在列表中添加了两次相同的字典。
问题出现在你的第一个陈述中:
data = [{}] * 2
这会创建一个列表,其中包含两次相同的条目。当您更新其中一个时,更新将在列表的两个条目中都可见。
试试这个:
data = [ {} for i in range(2) ]
当您现在进行更新时,您将获得预期的结果。
答案 2 :(得分:0)
而不是使用:
data = [{}] * 2
data[1].update({3:4})
print data
将相同的字典添加到列表中,改为使用:
data = [{}, {}]
data[1].update({3:4})
print data
data[1]
现在表示列表中的第二个{}
。该计划的结果是:
[{}, {3: 4}]
为什么data = [{}] * 2
无效?因为你两次做同样的事情,这意味着你被迫用{}
替换{3:4}
,这会给你你的结果。使用data = [{}, {}]
,您只能更改第二个字典,因为data[0]
是第一个,data[1]
是下一个项目,依此类推。