python中的项目频率计数

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (98)

我是个python新手,所以也许我的问题是个菜鸟。假设我有一个单词列表,我希望找到每个单词出现在该列表中的次数。显而易见的方法是:

words = "apple banana apple strawberry banana lemon"
uniques = set(words.split())
freqs = [(item, words.split.count(item)) for item in uniques]
print(freqs)

但是我发现这段代码不是很好,因为这样的程序会在单词列表中运行两次,一次用来构建集合,第二次计算出现的次数。当然,我可以写一个函数来运行列表并进行计数,但那不是那样的仿生。那么,有没有一种更有效、更有效的节能型方法呢?

提问于
用户回答回答于
from collections import defaultdict

words = "apple banana apple strawberry banana lemon"

d = defaultdict(int)
for word in words.split():
    d[word] += 1

这是在O(N)中运行的。

用户回答回答于

如果您正在使用python 2.7+/3.1+,则有一个计数器类在为解决此类问题而构建的集合模块中:

>>> from collections import Counter
>>> words = "apple banana apple strawberry banana lemon"
>>> freqs = Counter(words.split())
>>> print(freqs)
Counter({'apple': 2, 'banana': 2, 'strawberry': 1, 'lemon': 1})
>>> 

扫码关注云+社区

领取腾讯云代金券