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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 十道海量数据处理面试题与十个方法大总结

    十道海量数据处理面试题与十个方法大总结所谓海量数据处理,就是基于海量数据上的存储、处理、操作。        海量就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是无法一次性装入内存。解决办法:(1)针对时间,可以采用巧妙的算法搭配合适的数据结构,如Hash/bit-map/堆/数据库或倒排索引/trie树;(2)针对空间,大而化小:分而治之/hash映射,把规模大化为规模小的,各个击破。

    2022年6月23日
    46
  • bat倒计时代码

    bat倒计时相信大家都想要代码吧,下面是代码。@echooffseta=(这里是几分不支持10分)setb=(这里是几秒):dao1set/ab=b-1ping-n2-w500127.1>nulclsecho倒计时:%a%分%b%秒if%b%==0(set/aa=a-1)else(gotodao1)if%a%==-1(goto…

    2022年4月17日
    52
  • JAVA——数组截取——调用库中方法

    JAVA——数组截取——调用库中方法1,使用Java类库中的方法System.arraycopy2,使用Java类库中的方法java.util.Arrays.copyOf3,重写myCopy(一)使用.arraycopy方法使用方法:System.arraycopy(源数组名称,源数组开始点,目标数组名称,目标数组开始点,拷贝长度);说明:将arr1数组中的一部分替换成arr2数组中的一部分可以从任意位置开始截取…

    2022年6月9日
    166
  • mysql官网下载详细教程图文

    mysql官网下载详细教程图文2019年的mysql官网下载教程■打开地址https://www.mysql.com/downloads/点击打开■进入首页点击MySQLCommunity(GPL)Downloads»■再点击MySQLCommunityServer这里选择的是linux版本。如果是Windows或者其他版本请另请选择即可■点击下载后…

    2022年5月1日
    55
  • 从零开始学python微课视频版-从零开始学Python(微课视频版)

    从零开始学python微课视频版-从零开始学Python(微课视频版)基本信息书名:从零开始学Python(微课视频版):89.80元作者:何明编著著出版社:中国水利水电出版社出版日期:2020_04_01ISBN:9787517083818字数:644000页码:390版次:1装帧:平装开本:16开商品重量:编辑推荐这是一本针对零基础的读者设计的Python程序设计的入门教程、视频教程。该书以基础知识、实例和实战案例相结合的形式全面详尽地介绍了Python编程…

    2022年6月3日
    41
  • prototype.js的系列文章——关于prototype.js

    prototype.js的系列文章——关于prototype.js 很早就知道prototype.js是一个javascript的工具函数库,平时的开发中使用频率也非常的高,但是,由于工作时间问题,一直都没有静下心来研究学习一下,最近又萌发了系统学习prototype.js的念头,刚好手头比较闲,就决定边学习边将学习心得记录下来,以和更多的同仁交流分享。关于prototype.js如果你曾经使用过prototype.js,那么,本系列文章希望能够给你提供

    2022年7月23日
    10

发表回复

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

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