for循環將字典添加到列表中出現覆蓋前面數據的問題


user_list = []
dic = {}
for i in range(3):
username = input("用戶名")
password = input("密碼")
dic["用戶名"]=username
dic["密碼"]=password
user_list.append(dic)
print(user_list)
結果

用戶名1
密碼2
用戶名3
密碼4
用戶名5
密碼6
[{'用戶名': '5', '密碼': '6'}, {'用戶名': '5', '密碼': '6'}, {'用戶名': '5', '密碼': '6'}]

如上述代碼,想將dic中的數據通過for循環的方式添加到user_list里面

分析原因:

user_list = []
dic = {}
for i in range(3):
username = input("用戶名")
password = input("密碼")
dic["用戶名"]=username
dic["密碼"]=password
print(id(dic))
user_list.append(dic)
print(user_list)

打印每次結果:

用戶名1
密碼2
2081248468712
用戶名3
密碼4
2081248468712
用戶名5
密碼6
2081248468712
[{'用戶名': '5', '密碼': '6'}, {'用戶名': '5', '密碼': '6'}, {'用戶名': '5', '密碼': '6'}]

發現每次for循環之后添加到字典中,都會覆蓋掉上次添加的數據.並且內存地址相同,所以就會影響到列表中已經存入的字典。

因為字典的增加方式dict1['aaa'] = bbb,這種形式是如果字典理由對應的key就會覆蓋掉,沒有對應的key就會添加到字典里。

解決辦法:

user_list = []
for i in range(3):
dic = {}
username = input("用戶名")
password = input("密碼")
dic["用戶名"]=username
dic["密碼"]=password
print(id(dic))
user_list.append(dic)
print(user_list)

每次for循環都將字典初始化,然后再添加數據,就結覺問題了。

打印結果:

用戶名1
密碼2
2374381166312
用戶名3
密碼4
2374381166384
用戶名5
密碼6
2374381195552
[{'用戶名': '1', '密碼': '2'}, {'用戶名': '3', '密碼': '4'}, {'用戶名': '5', '密碼': '6'}]

結束!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM