我正在尝试使用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;
答案 0 :(得分:0)
您继续将引用传递给temp_b
和temp_s
。这就是为什么在清空这些列表之后,蛋糕的内容也会发生变化(字典的值与temp_b
和temp_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[:]
编辑:另一个答案建议在添加值时复制值。这将有效,但在您的情况下,我觉得制作副本然后归零是不必要的复杂。如果您继续添加到列表中,这可能是合适的。