无法在python中读取变量外部循环的值

时间:2018-04-20 22:29:00

标签: python-3.x spacy

我正在尝试使用spacy创建一个字典列表,其中包含'body'和'summ'键的单词列表。我也使用BeautifulSoup,因为实际的数据是原始的html。

这就是我到目前为止所拥有的

'summ': ['as', 'per', 'the', 'budget', 'estimates', 'we', 'are', 'going', 'to', 'spend', 'rs', '<NUM>', 'crore', 'in', 'the', 'next', 'year'], 
'body': ['central', 'government', 'has', 'proposed', 'spendings', 'worth', 'over', 'rs', '<NUM>', 'crore', 'on', 'medical', 'and', 'cash', 'benefits', 'for', 'workers', 'and', 'family', 'members']}]

第一个print语句提供正确的输出

[{'summ': [], 'body': []}]

然而,在清空列表sent_x,sent_y,temp_b和temp_s之后,输出来了:

final long startTime = System.nanoTime()/1000;

2 个答案:

答案 0 :(得分:0)

您继续将引用传递给temp_btemp_s。这就是为什么在清空这些列表之后,蛋糕的内容也会发生变化(字典的值与temp_btemp_s的对象相同)!

您只需在将finale_doc字典附加到cake列表之前制作副本。

finale_doc.update({'body': list(temp_b), 'summ': list(temp_s)})

答案 1 :(得分:0)

你应该尝试创建一个最小的可重现版本,因为它符合堆栈溢出指南,你可能会回答你自己的问题。

我认为你问的是:

如何在不更改该列表的其他实例的情况下清空列表?

我制作了一些代码,我认为它应该可行:

items = []
contents = []
for value in (1, 2):
   contents.append(value)
   items.append(contents)
   print(contents)
   del contents[:]
print(items)

按照我的要求打印[1][2],然后打印[[], []]而不是[[1], [2]]

然后我可以回答你的问题:

对象(包括列表)是永久性的,这不起作用

您可能希望在循环内创建一个新列表,而不是修改(添加到然后删除)相同的列表。您可以通过查看id(contents)id(items[0])等来验证这一点,并查看它们都是相同的列表。你甚至可以contents.append(None); print(items)看到你现在有[None, None]

尝试

for ...
    contents = []
    contents.append(value)

而不是

contents = []
for ...
    del contents[:]

编辑:另一个答案建议在添加值时复制值。这将有效,但在您的情况下,我觉得制作副本然后归零是不必要的复杂。如果您继续添加到列表中,这可能是合适的。