前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >for循环将字典添加到列表中出现覆盖前面数据的问题

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

作者头像
全栈程序员站长
发布2022-06-29 15:21:37
4.5K0
发布2022-06-29 15:21:37
举报
文章被收录于专栏:全栈程序员必看

错误代码:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Time    : 2021/4/19 11:27 PM
# @Author  : 余少琪
# @FileName: test.py
# @email   : 1603453211@qq.com

user_list = []
dic = {
   }

for i in range(3):
    username = input("请输入您的用户名:")
    password = input("请输入您的密码:")
    dic["用户名"] = username
    dic["密码"] = password
    user_list.append(dic)
    
print(user_list)

结果:
请输入您的用户名:yushaoqi
请输入您的密码:123456
请输入您的用户名:yushaoqi1
请输入您的密码:123456
请输入您的用户名:yushaoqi2
请输入您的密码:123456
[{
   '用户名': 'yushaoqi2', '密码': '123456'}, {
   '用户名': 'yushaoqi2', '密码': '123456'}, {
   '用户名': 'yushaoqi2', '密码': '123456'}]

我们可以看到上面的代码,我们通过for循环输入了3次不同的用户名和密码,并且添加到 user_list 的列表中,但是最终 user_list 打印了三次相同的数据

分析原因:

可以发现每次 for 循环添加到字典中,都会覆盖掉上次添加的数据,并且内存地址都是相同的,所以就会影响到列表中已经存入的字典。因为字典的增加方式dict[‘aaa] = bbb,这种形式如果字典里有对应的key就会覆盖掉,没有key就会添加到字典里。

解决方法:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Time    : 2021/4/19 11:30 PM
# @Author  : 余少琪
# @FileName: test.py
# @email   : 1603453211@qq.com

user_list = []

for i in range(3):
    dic = {
   }
    username = input("请输入您的用户名:")
    password = input("请输入您的密码:")
    dic["用户名"] = username
    dic["密码"] = password
    user_list.append(dic)

print(user_list)

结果:
请输入您的用户名:yushaoqi
请输入您的密码:yushaoqi
请输入您的用户名:yushaoqi1
请输入您的密码:yushaoqi1
请输入您的用户名:yushaoqi2
请输入您的密码:yushaoqi2
[{
   '用户名': 'yushaoqi', '密码': 'yushaoqi'}, {
   '用户名': 'yushaoqi1', '密码': 'yushaoqi1'}, {
   '用户名': 'yushaoqi2', '密码': 'yushaoqi2'}]

Process finished with exit code 0

每次for循环都将字典初始化,然后再添加数据,就解决问题啦~

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100689.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档