【发布时间】:2017-03-29 10:55:19
【问题描述】:
我试图使用字典来计算给定字符串的词频。说:
s = 'I ate an apple a big apple'
我知道计算词频的最好方法可能是使用collections.Counter。但我想知道我是否可以通过使用字典理解来解决这个问题。
我原来的方法(没有字典理解)是
dict = {}
for token in s.split(" "):
dict[token] = dict.get(token, 0) + 1
而且效果很好:
dict
{'I': 1, 'a': 1, 'an': 1, 'apple': 2, 'ate': 1, 'big': 1}
我尝试对此使用字典理解,例如
dict = {}
dict = {token: dict.get(token, 0) + 1 for token in s.split(" ")}
但这没有用。
dict
{'I': 1, 'a': 1, 'an': 1, 'apple': 1, 'ate': 1, 'big': 1}
字典理解有什么问题?是不是因为我在推导中使用了自己,所以每次我在推导中调用dict.get('apple', 0),我都会得到0?但是,我不知道如何对此进行测试,所以我不能 100% 确定。
附:如果有什么不同,我使用的是 python 3。
【问题讨论】:
-
这是
collections.Counter(一个 dict 子类型)很久以前解决的问题 -
我不会使用 dict 作为变量名,因为它是内置的,你可以这样做破坏一些东西
-
变量
dict直到完全计算完后才会更新,因此理解中的dict.get(token, 0)只会查询上一行中的空字典。 -
@MosesKoledoye 同意,只是想深入了解 dict 理解背后的机制。
标签: python dictionary