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

gan*_*cus 3 python for-loop list

我很难搞清楚为什么我在我的item_list列表中重复的"行"列表中得到n个最后元素?所以,如果我的行是一个元组列表:

(("ID 1", "info1", "description1"), ("ID 2", "info2", "description2"), ... ("ID 14", "info14", "description14"))
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用以下代码从这个"行"元组列表中创建一个列表字典:

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
Run Code Online (Sandbox Code Playgroud)

因此,如果我的"行"列表包含14个元素,我将在"item_list"字典列表中的"行"中获得第14个元素(最后一个元素)14次.

item_list = [{"ID": "ID 14", "Info": "info14", "Description": "description14"}, {"ID": "ID 14", "Info": "info14", "Description": "description14"} ... ] #14 times
Run Code Online (Sandbox Code Playgroud)

"行"列表是元组列表.如果我在附加到"item_list"之前打印"info"字典,我可以看到我的"info"字典的每个不同的迭代.

有人有主意吗?提前致谢.

use*_*450 11

我想你要改变:

item_list = []
info = {} # <---- Move this to inside the loop.

for row in rows:            
    itemId = row[0]
    itemDesc = row[10]
Run Code Online (Sandbox Code Playgroud)

至:

item_list = []

for row in rows:   
    info = {} # <---- here
    itemId = row[0]
    itemDesc = row[10]
Run Code Online (Sandbox Code Playgroud)


Bre*_*arn 5

您仅创建了一部info字典。每次添加时info,都将添加相同的字典。当在随后的循环迭代修改infoinfo['ID'] == ...等,要修改这个单一的字典。到处都有修改的引用,包括中的每个列表元素item_list

要解决此问题,请info = {}在循环内移动。这样,您将在每次迭代中创建(并追加)词典。