Python附加列表重复最后一个元素?

时间:2014-06-24 20:32:26

标签: python list for-loop

我很难搞清楚为什么我会在我的"行"中获得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"的每个不同的迭代。字典。

有人有什么想法吗?提前谢谢。

2 个答案:

答案 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 字典。