【问题标题】:Python Append List Repeats Last Element?Python追加列表重复最后一个元素?
【发布时间】:2014-08-15 06:05:33
【问题描述】:

我很难弄清楚为什么我的“行”列表中的最后 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

所以如果我的“rows”列表有 14 个元素,我将在我的“item_list”字典列表中 14 次获得“rows”中的第 14 个元素(最后一个元素)。

item_list = [{"ID": "ID 14", "Info": "info14", "Description": "description14"}, {"ID": "ID 14", "Info": "info14", "Description": "description14"} ... ] #14 times

“行”列表是一个元组列表。如果我在附加到“item_list”之前打印“信息”字典,我可以看到我的“信息”字典的每个不同迭代。

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

【问题讨论】:

  • rows 定义在哪里?
  • 请举一个我们可以重现的例子。
  • 您能否回顾一下您的缩进并提供一些示例输入以及预期和实际输出?
  • 您的问题措辞不当。听起来您是在说最后一行是重复的,即最后一行出现两次,而所有其他行出现一次。但是您是说 所有 行都是最后一行的重复,这是一个更简单的问题。
  • 首先,我非常感谢您的努力和整体态度。当您编辑被搁置的问题时,它会被放入审核队列,但仍需要 5 票才能重新打开它。审稿人显然不相信您的编辑提供了一个独立的可重现示例。或者也许他们只是没有打扰,因为这个问题已经有了一个公认的答案。至于如何让它变得更好,我想你可以提供一个rows 的例子,以便整个代码可以直接复制粘贴到解释器中(见第一条评论)。但这已经足够了,我投票决定重新开放。

标签: python list for-loop


【解决方案1】:

我想你想改变:

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]

【讨论】:

  • forehead_slap 哇,谢谢!我完全跳过了。
【解决方案2】:

您只创建了一个info 字典。每次您追加info 时,您都在追加同一个 字典。当您在后续循环迭代中修改 infoinfo['ID'] == ... 等时,您正在修改这个单一的字典。任何引用它的地方都可以看到修改,包括item_list 中的每个列表元素。

要修复它,请将您的 info = {} 移动到循环内。这样,您将在每次迭代时创建(并附加)一个 new 字典。

【讨论】:

    猜你喜欢
    • 2015-09-14
    • 2011-11-20
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2022-12-02
    相关资源
    最近更新 更多