我很难搞清楚为什么我会在我的"行"中获得n个最后元素。在我的item_list列表中重复列表?所以如果我的行是一个元组列表:
(("ID 1", "info1", "description1"), ("ID 2", "info2", "description2"), ... ("ID 14", "info14", "description14"))
然后我试着用这个"行"制作一个列表字典。使用以下代码的元组列表:
item_list = []
info = {}
for row in rows:
itemId = row[0]
itemInfo = row[1]
itemDesc = row[2]
info['ID'] = itemId
info['Info'] = itemId
info['Description'] = itemDesc
print info
item_list.append(info)
print item_list
所以如果我的"行" list有14个元素,我将在" rows"中获得第14个元素(最后一个元素)我的" item_list" 14次字典列表。
item_list = [{"ID": "ID 14", "Info": "info14", "Description": "description14"}, {"ID": "ID 14", "Info": "info14", "Description": "description14"} ... ] #14 times
"行" list是元组列表。如果我打印"信息"在附加到" item_list"之前的字典我可以看到我的" info"的每个不同的迭代。字典。
有人有什么想法吗?提前谢谢。
答案 0 :(得分:10)
我想你想改变:
item_list = []
info = {} # <---- Move this to inside the loop.
for row in rows:
itemId = row[0]
itemDesc = row[10]
为:
item_list = []
for row in rows:
info = {} # <---- here
itemId = row[0]
itemDesc = row[10]
答案 1 :(得分:5)
您只创建了一个info
字典。每次添加info
时,都会附加相同的字典。在后续循环迭代中,您使用info
等修改info['ID'] == ...
,您正在修改此单个字典。在任何地方都可以看到修改,包括item_list
中的每个列表元素。
要解决此问题,请在循环内移动info = {}
。这样,您将在每次迭代时创建(并附加) new 字典。