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'}, {}]