for迴圈將字典新增到列表中出現覆蓋前面資料的問題
阿新 • • 發佈:2019-01-08
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'}]
結束!