Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-向数组中的字典添加键值对_Python_Arrays_Dictionary - Fatal编程技术网

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

Python-向数组中的字典添加键值对,python,arrays,dictionary,Python,Arrays,Dictionary,问题在标题中。我不能让它工作: >>> data = [{}] * 2 >>> data[1].update({3:4}) >>> data [{3: 4}, {3: 4}] 键值对添加到数组的所有元素。我希望收到: [{}, {3: 4}] 问题是,您在列表中添加了两次相同的词典 问题已经出现在您的第一句话中: 数据=[{}]*2 这将创建一个具有两倍相同条目的列表。当您更新其中一个时,更新将在列表的两个条目中都可见 试试这个: dat

问题在标题中。我不能让它工作:

>>> data = [{}] * 2
>>> data[1].update({3:4})
>>> data
[{3: 4}, {3: 4}]
键值对添加到数组的所有元素。我希望收到:

[{}, {3: 4}]

问题是,您在列表中添加了两次相同的词典

问题已经出现在您的第一句话中:

数据=[{}]*2

这将创建一个具有两倍相同条目的列表。当您更新其中一个时,更新将在列表的两个条目中都可见

试试这个:

data = [ {} for i in range(2) ]
现在执行更新时,您将获得预期结果。

而不是使用:

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}
替换
{3:4}
,这样你就得到了结果。使用
data=[{},{}]
,您只能更改第二个词典,因为
data[0]
是第一个词典,而
data[1]
是下一个词典,依此类推。

问题在于

data = [{}] * 2
创建两次包含相同词典的列表

为了说明这一点,让我们看看
id(数据[0])
id(数据[1])

请注意,id(数据[0])和id(数据[1])是相同的,因为列表中的两个条目都引用相同的对象

你可能想要的是

>>> d2 = [{} for i in range(2)]
>>> d2[0][4] = 'a'
>>> d2
[{4: 'a'}, {}]

做[{}]*2的目的是什么,因为dict是可变的,所以你要创建同一dict的引用两次,所以你对第一个dict所做的任何更改都会反映在第二个dict中……除非,我遗漏了什么,那么简单的赋值呢
data[1]={3:4}
In[33]:data Out[33]:[{},{3:4}]`我编辑了你的答案,通过
id()
函数举例说明
[{}]*2
指向同一对象的事实。希望你能接受!
>>> d2 = [{} for i in range(2)]
>>> d2[0][4] = 'a'
>>> d2
[{4: 'a'}, {}]