1. 程式人生 > >for迴圈將字典新增到列表中出現覆蓋前面資料的問題

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'}]

結束!