for循环将字典添加到列表中出现覆盖前面数据的问题

user_list = []dic = {}for i in range(3):    username = input("用户名")    password = input("密码")    dic["用户名"]=username    dic["密码"]=password    user_list.append(dic)print(user_list)结果

用户名1
密码2
用户名3
密码4
用户名5
密码6
[{‘用户名‘: ‘5‘, ‘密码‘: ‘6‘}, {‘用户名‘: ‘5‘, ‘密码‘: ‘6‘}, {‘用户名‘: ‘5‘, ‘密码‘: ‘6‘}]

如上述代码,想将dic中的数据通过for循环的方式添加到user_list里面

分析原因:

user_list = []dic = {}for i in range(3):    username = input("用户名")    password = input("密码")    dic["用户名"]=username    dic["密码"]=password    print(id(dic))    user_list.append(dic)print(user_list)

打印每次结果:

用户名1
密码2
2081248468712
用户名3
密码4
2081248468712
用户名5
密码6
2081248468712
[{‘用户名‘: ‘5‘, ‘密码‘: ‘6‘}, {‘用户名‘: ‘5‘, ‘密码‘: ‘6‘}, {‘用户名‘: ‘5‘, ‘密码‘: ‘6‘}]

发现每次for循环之后添加到字典中,都会覆盖掉上次添加的数据.并且内存地址相同,所以就会影响到列表中已经存入的字典。

因为字典的增加方式dict1[‘aaa‘] = bbb,这种形式是如果字典理由对应的key就会覆盖掉,没有对应的key就会添加到字典里。

解决办法:

user_list = []for i in range(3):    dic = {}    username = input("用户名")    password = input("密码")    dic["用户名"]=username    dic["密码"]=password    print(id(dic))    user_list.append(dic)print(user_list)

每次for循环都将字典初始化,然后再添加数据,就结觉问题了。

打印结果:

用户名1
密码2
2374381166312
用户名3
密码4
2374381166384
用户名5
密码6
2374381195552
[{‘用户名‘: ‘1‘, ‘密码‘: ‘2‘}, {‘用户名‘: ‘3‘, ‘密码‘: ‘4‘}, {‘用户名‘: ‘5‘, ‘密码‘: ‘6‘}]

结束!

原文地址:https://www.cnblogs.com/ellisonzhang/p/10241553.html

时间: 2024-10-27 07:53:26

for循环将字典添加到列表中出现覆盖前面数据的问题的相关文章

python中列表排序,字典排序,列表中的字典排序

#-*- encoding=utf-8 -*- import operator #按字典值排序(默认为升序) x = {1:2, 3:4, 4:3, 2:1, 0:0} sorted_x = sorted(x.iteritems(), key=operator.itemgetter(1)) print sorted_x #[(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)] #如果要降序排序,可以指定reverse=True sorted_x = sorted(x.i

python删除列表中得重复得数据

解决思想:将列表转换为 集合,利用集合删除重复数据得特性删除重复数据,然后将集合转换为列表 #删除列表中得重复元素 def delect_1 (lt): s = set(lt) lt = list(s) print(lt)delect_1([1,2,3,4,1,3,4,5]) 原文地址:https://www.cnblogs.com/chaojiyingxiong/p/9174791.html

遍历存储所有物体添加到列表中(使用GameObject.activeSelf进行判断)

//存储菜单列表 List<GameObject> subMenu = new List<GameObject>(); //存储所有子菜单 public void StoreSubMenuData() { var menu = mainMenuScreen.transform.FindChild("back/menuPanel"); foreach (Transform kk in menu) { if (kk.GetComponent<Image>

列表中的小方法

本博文涉及到的方法有:index().append().insert().remove().sort(). 1.index():接受一个值,如果此值在列表中,就会返回它的下标:如果此值出现多次,只返回第一个下标 list = ['hello','world','hi'] print (list.index('hello')) print (list.index('hi')) 返回值为:0,1 2.append()在列表的末尾插入数据,insert(新值下标,新值)表示在列表中任意位置插入数据.

sql语句中查询出的数据添加一列,并且添加默认值

查询出数据,并且要添加一列表中都不存在的数据,且这一列的值都是相等的 select app_id,app_secret from wx_ticket group by app_id; 查询出的数据是 app_id | expires_in --------------------+------------ wxeec89cdf2d435d10 | 7200 wxeec89cdf2d435d10 | 7200 wx9b7bfb5f59df5009 | 7200 wx9b7bfb5f59df5009

python基础一 -------如何在列表字典集合中根据条件筛选数据

如何在列表字典集合中根据条件筛选数据 一:列表 先随机生成一个列表,过滤掉负数 1,普通for循环迭代判断 2,filter()函数判断,filter(函数,list|tuple|string) 1 filter(lambda x:x>0,data) 3,列表推倒式 4,效率对比:还是列表推导式稍高 二:字典 1,跟列表类似,推导式 先生成随机的字典(key从1-20) 过滤掉value是负数的值 三:集合 随机生成10个元素的集合 过滤掉小于0的元素,跟字典类似

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

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

【转】无法将notepad++添加到打开方式列表中的解决办法

问题:想要设置notepad++为默认打开方式,却发现在点击browse找到notepad++.exe点击打开后没有在打开方式列表中找到notepad++. 原因:更新程序版本后程序的路径发生了变动.然而注册表中得文件路径并没有改变导致的. 解决办法: 1. 点击开始,输入regedit,点击回车 2.在注册表中找到 HKEY_CLASSES_ROOT 下面的 Applications   3.修改注册表 1).在Applications下面找到对应的程序名,我名为notepad++.exe,点

每日学习心得:SharePoint 为列表中的文件夹添加子项(文件夹)、新增指定内容类型的子项、查询列表中指定的文件夹下的内容

前言: 这里主要是针对列表中的文件下新增子项的操作,同时在新建子项时,可以为子项指定特定的内容类型,在某些时候需要查询指定的文件夹下的内容,针对这些场景都一一给力示例和说明,都是一些很小的知识点,希望能够对大家有所帮助. 1.   在列表中为列表项添加子项 为列表添加子项大家都很熟悉,但是如何为列表项添加子项呢?例如列表项是一个文件夹,如何为该文件夹添加子项呢?这里就用到了List.AddItem()方法,具体示例如下: 首先我们要获取列表中的子项: SPListItem root_item=l