给列表里添加字典时被最后一个覆盖

>>> item={} ; items=[]    #先声明一个字典和一个列表,字典用来添加到列表里面
>>> item[‘index‘]=1       #给字典赋值
>>> items.append(item)
>>> items
[{‘index‘: 1}]            #添加到列表里面复合预期
>>> item[‘index‘]=2       #现在修改字典
>>> item
{‘index‘: 2}              #修改成功
>>> items.append(item)    #将修改后的新字典添加到列表
>>> items                 #按预期应该是[{‘index‘: 1}, {‘index‘: 2}]
[{‘index‘: 2}, {‘index‘: 2}]
#找一下原因:
>>> id(item),id(items[0]),id(items[1])
(3083974692L, 3083974692L, 3083974692L)
可以看到item,items[0],items[1]都指向同一个对象,实际上是列表在多次添加(引用)同一个字典。

一种解决的办法:

>>> items=[]
>>> for i in range(3):
...     item={}         #每次都重新声明一个新字典
...     item[‘index‘]=i
...     items.append(item)
...     id(item)
...
3084185084L
3084183588L
3084218956L
>>> items
[{‘index‘: 0}, {‘index‘: 1}, {‘index‘: 2}]
>>>
时间: 2024-10-09 01:39:47

给列表里添加字典时被最后一个覆盖的相关文章

python列表中添加对象时的注意

最近在用python写代码,用到了对象数组.在c++中我们要使用能够灵活操作的对象数组,一般会用stl的vector类,该类的push_back方法可以将一个对象的拷贝加入到vector对象中,所以当使用[]下标对vector的元素进行修改时,原来的作为push_back参数的那个对象的值并不会改变.python中类似的方法是列表的append方法,但是要注意此时若加入到列表中的是基础数据类型,则是值传递,若是对象,则是引用传递.这种参数的传递方式和java一样.因此,在python中通过列表下

python列表里含有字典的排序

data_reback={a:[{'a':1,'c':'aa'},{'a':55,'d':'aa'},{'a':3,'s':'aaa'}]} data_reback=sorted(data_reback['a'], key=lambda x : x['id'],reverse=True)

对列表里的字典按年龄从小到大排序

infors=[{'name':'laowang','age':10},{'name':'xiaoming','age':30},{'name':'hehe','age':20}] infors.sort(key=lambda x:x['age']) print(infors) 原文地址:https://www.cnblogs.com/z-x-y/p/10090746.html

pyqt5 列表内添加按钮

我们想在操作列表内添加按钮,例如查看.修改.删除 1.定义添加按钮的方法 1 # 列表内添加按钮 2 def buttonForRow(self,id): 3 widget=QWidget() 4 # 修改 5 updateBtn = QPushButton('修改') 6 updateBtn.setStyleSheet(''' text-align : center; 7 background-color : NavajoWhite; 8 height : 30px; 9 border-sty

在Qt Creator 和在 vs2012 里添加信号和槽

Qt  的窗口部件通过发射信号(signal)来表明一个用户的动作已经发生了或者是一个状态已经改变了. 如点击一个QPushButton时,按钮会发送一个clicked()信号,信号可以与函数(在qt里称做槽slot)相连接 可以把信号理解为c#里的事件 在vs2012里和在Qt Creator里添加信号和槽不一样,这里把两种环境下怎么添加详细说明一下 1.在vs2012里添加信号和槽 新建一个qt的项目QtDemo 在qtdeom.h里添加槽 private slots: void Btn_O

转--程序无法添加到打开方式列表里解决方法

有时候,同时安装两个版本的同一个软件,并且安装到不同目录,那么,第一次关联的软件就会写入注册表,第二个就算你选择了打开方式列表中的默认,还是会打开第一个,甚至你删除了第一个之后,第二个无法添加到打开方式列表中——那不是电脑的错,他在他记忆中的路径中找不到你选择的这个软件. 来给他洗洗脑吧!! 程序无法添加到打开方式列表里 更新程序版本后程序的路径发生了变动,而注册表里的路径却尚未修改,结果就出现了“打开方式”里无法添加应用程序的情况. “开始”—“运行”—输入“regedit”点回车,打开注册表

列表中放置字典的应用:名片管理系统

在宿舍宅了一天没出门,感觉自己快要霉掉了. 明天一定要出去走走才行啊,身体是自己的. 今天总算是半抄半写的把这个名片管理系统做完了,问题依然很多,比如我竟然忘了条件里的比较要用==而不是=--低级错误 手感不够,说起来手感这东西也只有长时间持之以恒地写代码才能培养出来了,好多东西不熟悉. 算了,说说今天这个系统好了,名片管理系统,用字典保存一个人的所有信息,用列表保存字典,再用列表的相应命令实现名片系统的增删改查,也即列表中的字典的增删改查.代码如下: #1.程序说明print('$'*50)p

Python基础【数据结构:列表 | 元组 | 集合 | 字典】

序列 序列是Python中最基本的数据结构.包括字符串,列表,元组,Unicode字符串,buffer对象,xrange对象.序列中的每个元素都分配一个数字,即它的索引第一个索引是0,第二个索引是1,依此类推. 列表和元组 列表一个方括号内的逗号分隔值列表中可以存放不同的数据类型. 例:[1,1.2,True,'str',[2,False]]元组与列表类似,不同之处在于元组的元素不能修改.元组使用小括号,列表使用方括号. 例:(1,1.2,True,'str',[2,False]) 列表和元组的

组合框里添加复选框的方法(使用勾选的假象,用图片代替而已,并非QT原生支持)

组合框可以看作是列表框和文本框的组合,因其占据的空间少,使用操作方便,常被界面设计人员用于界面开发设计中,在有限个输入的条件下,组合框常用来代替文本框,这样从用户使用角度来看,更趋人性化,所见即所得.然好的控件永远敢不上应用的步伐,有时常规控件并不能满足应用的需要,经常需要在现有的控件上做扩展.有些应用需要在组合框的列表框的每一项前加复选框,以便可以控制列表框每一项的状态(选中还是未选中),显然现有的组合框(列表框+文本框的组合)不能满足应用要求.那么怎么得到一个超强组合框(列表框+文本框+复选