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

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

错误代码:

# -*- 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就会添加到字典里。

解决方法:

# -*- 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.net/100689.html原文链接:https://javaforall.net

(0)
上一篇 2021年5月24日 下午2:00
下一篇 2021年5月24日 下午3:00


相关推荐

  • Object 转Map,Map转Object方式总结

    Object 转Map,Map转Object方式总结商品业务对象定义 ProductProdu newProduct product setId 1L product setName 爱他美 product setProductDt 2022 03 16 第一种 通过 AlibabaFastj 实现 pom xml 文件依赖 dependency groupId com alibaba groupId dependency

    2026年3月18日
    2
  • Java标识符命名规则和规范(含举例)

    Java标识符命名规则和规范(含举例)标识符标识符简单来讲就是可以自己命名一 命名规则标识符可以由大小写英文字母 数字 和 组成不能以数字开头不能使用关键字和保留字 但可以包含关键字和保留字 Mystatic 符合规范 严格区分大小写 长度无限 5 不能使用空格注意 如果不符合命名规则 编译不能通过 二 命名规范包名 多单词组成时所有字母小写 xxyyzz 类名 接口名 多单词组成时 所有字母的首字母大写 XxYyZz 变量名 方法名 多单词组成时 第一个单词首字母小写后面单词首字母大写 xxYyZz 常量名 所有字母大写

    2026年3月17日
    2
  • EXT中的apply方法

    EXT中的apply方法Ext.apply=function(o,c,defaults){if(defaults){//no"this"referenceforfriendlyoutofscopecallsExt.apply(o,defaults);}if(o&&c&&typeofc==…

    2022年7月28日
    9
  • Java多线程——基本概念「建议收藏」

    Java多线程——基本概念「建议收藏」线程和多线程程序:是一段静态的代码,是应用软件执行的蓝本进程:是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程线程:是比进程更小的执行单位。进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索,即每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念主线程:(每个Java程序都有一个…

    2022年5月13日
    40
  • intellij idea 激活码 2021.5【在线注册码/序列号/破解码】[通俗易懂]

    intellij idea 激活码 2021.5【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    56
  • 电商溶图高效解决方案:用 PS+StartAI 玩转 nanobanana,1招轻松打造优质主图

    电商溶图高效解决方案:用 PS+StartAI 玩转 nanobanana,1招轻松打造优质主图

    2026年3月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号