将单词列表转换为频率字典的最佳方法

26 投票
8 回答
26239 浏览
提问于 2025-04-15 11:05

有没有什么好的方法可以把一个列表或元组转换成字典,其中字典的键是列表中不同的值,而字典的值则是这些不同值出现的次数呢?

换句话说:

['a', 'b', 'b', 'a', 'b', 'c']
--> 
{'a': 2, 'b': 3, 'c': 1}

(我之前做过很多次这样的事情,标准库里有没有现成的工具可以帮我完成这个呢?)

编辑:

Jacob Gabrielson 提到在标准库里有一个新功能,适用于 2.7/3.1 版本。

8 个回答

17

需要注意的是,从Python 2.7和3.1开始,这个功能将会直接包含在collections模块里。想了解更多信息,可以查看这个链接。下面是来自发布说明的示例:

>>> from collections import Counter
>>> c=Counter()
>>> for letter in 'here is a sample of english text':
...   c[letter] += 1
...
>>> c
Counter({' ': 6, 'e': 5, 's': 3, 'a': 2, 'i': 2, 'h': 2,
'l': 2, 't': 2, 'g': 1, 'f': 1, 'm': 1, 'o': 1, 'n': 1,
'p': 1, 'r': 1, 'x': 1})
>>> c['e']
5
>>> c['z']
0
43

我发现,最容易理解的方法(虽然可能不是最高效的)是这样做:

{i:words.count(i) for i in set(words)}
23

有点像

from collections import defaultdict
fq= defaultdict( int )
for w in words:
    fq[w] += 1

这个通常效果很好。

撰写回答