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循環都將字典初始化,然后再添加數據,就結覺問題了。
打印結果:
結束!