Python - 将键值对添加到数组中的字典中

时间:2015-10-23 23:01:30

标签: python arrays dictionary

问题在标题中。我不能让它发挥作用:

>>> data = [{}] * 2
>>> data[1].update({3:4})
>>> data
[{3: 4}, {3: 4}]

键值对添加到数组的所有元素。我希望收到:

[{}, {3: 4}]

3 个答案:

答案 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]是下一个项目,依此类推。