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循环都将字典初始化,然后再添加数据,就解决问题啦~

你可能感兴趣的:(Python)