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


相关推荐

  • django模型数据类型_盒子模型的基本属性

    django模型数据类型_盒子模型的基本属性模型中常用字段字段说明AutoField一般不需要使用这个类型,自增长类型,数据表的字段类型为整数,长度为11位BigAutoField自增长类型,数据表的字段类型为bigint,长度为2

    2022年7月28日
  • IT行业分析(华为裁员)「建议收藏」

    IT行业分析(华为裁员)「建议收藏」近来忙于各种麻烦事务,知识图谱的多路归并一直未能跟进。但在写多路归并前,我想是时候先总结下我的这几年。总结的经验,不仅包括我个人这几年的见闻感悟与得失,也是80后这代的一个缩影,以及对社会的一些思考。首先直插正题,华为的裁员。华为我确实没呆过,不过这不妨碍我认定华为是一个人员流动性非常大的公司,和BAT、美团、京东、360、小米等等互联网公司一样大。谁更大我不知

    2022年7月18日
  • c语言socket编程代码例子

    c语言socket编程代码例子socket_client客户端代码#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<string.h>#include<error.h>#include<netinet/in.h>intmain(){//1.创建socket,socket()函数intsockfd=0;sockfd=sock.

    2022年10月24日
  • openEuler安装_Java源代码会被编译成

    openEuler安装_Java源代码会被编译成openEulerLinux源代码编译安装Nginx升级系统和软件yum-yupdate关闭防火墙systemctlstopfirewalldsystemctldisablefirewalld编辑/etc/selinux/config#SELINUX=enforcing修改为SELINUX=disabled#或者执行sed-i’s/SELINUX=enforcing/SELINUX=disabled/g’/etc/selinux/config保

    2022年9月28日
  • LM算法推导「建议收藏」

    LM算法推导「建议收藏」提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档前言LM在非线性优化中有着广泛的应用,CSDN中有很多写好的代码但是相关的公式推导却很少,所以我就把公式推导整理了一下。一、公式推导…

    2022年10月1日
  • pycharm远程部署_pycharm部署服务器

    pycharm远程部署_pycharm部署服务器pycharm连接远程服务器1.pycharm中打开tools->deployment->configuration…2.填写下图信息3.填写mappings信息4.add一个远程python解释器经过以上步骤,远程解释器就配置好了使用1.上传文件到服务器一般解释器配置好后,本地项目会自动上传到服务器上,当上传完成就可以通过使用服务器环境在本地运行程序了…

    2022年8月27日

发表回复

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

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