- 不要做
dict = {}
。dict
是一个内置函数,你正在隐藏它。这并不重要,如果您以后需要它,您将无法使用它。
- 字典是键→值映射。就像一本真正的字典(单词→翻译)。你所做的就是说 value
('believe', …)
,它是一个元组,对应'word'
于你字典中的键。然后,您使用dict.values()
which 为您提供存储在字典中的所有值的序列,在您的情况下,该序列仅包含一个项目,并且该项目是一个元组。您的if
条件永远不会是True
:word
是一个字符串并且dict.values()
是一个序列,由单个字符串元组组成。
- 我不太确定你为什么要使用字典。似乎您有一组对您很重要的单词,并且您正在扫描
corpora
并计算这些单词的出现次数。这里的关键词是set。你不需要字典,你需要一个set
.
- 目前还不清楚,你在数什么。
i
你要添加什么counter
?如果您打算加counter
一,那应该是counter = counter + 1
或简单地counter += 1
.
你为什么要重置counter
?
counter = 0
当你发现一个未知单词时,我不认为你真的想重置计数器。似乎不知道的词不应该改变你的计数器,那么,就不要改变它。
- 笔记。尽量避免在变量名中使用大写字母(
Result = []
不好)。同样正如其他人所提到的,您在 . 之后缺少一个冒号else
。
所以,现在让我们把它们放在一起。首先要做的是制作一组我们感兴趣的单词:
words = {'believe', 'tried', 'trust', 'experience'}
接下来,您可以遍历语料库中的单词,并查看其中哪些出现在集合中:
for word in corpora:
if word in words:
# do something
目前尚不清楚代码究竟应该做什么,但如果您的目标是知道集合中的所有单词一起在语料库中找到的次数,那么您只需在其中添加counter
一个if
。
如果您想知道集合中每个单词在语料库中出现的次数,则必须为集合中的每个单词维护一个单独的计数器(这就是字典可能有用的地方)。这可以通过collections.Counter
(这是一个特殊的字典)轻松实现,并且您必须过滤您的语料库以仅留下您感兴趣的单词,这ifilter
将对您有所帮助。
filtered_corpora = itertools.ifilter(lambda w: w in words, corpora)
——这是你的语料库将所有找不到的词都words
删除。您可以Counter
立即通过它。
这个技巧对于第一种情况也很有用(即当你只需要总数时)。您将只返回此filter
ed 语料库 ( len(filtered_corpora)
) 的长度。