Python 获取列表中项目的频率计数

Python 获取列表中项目的频率计数,python,Python,这很可能是以前问过的,但我似乎找不到一个直接的解决方案。假设我在列表中有一组数字,如: 1234 2233 3232 1234 我需要找到一种方法,使用脚本打印列表中项目的总频率,如下所示: 1234 2 2233 1 3232 1 [(3232, 1), (2233, 1), (1234, 2)] defaultdict(<type 'int'>, {3232: 1, 2233: 1, 1234: 2}) 有人能帮我解释一下吗 谢谢您可以使用 下面的代码 from iter

这很可能是以前问过的,但我似乎找不到一个直接的解决方案。假设我在列表中有一组数字,如:

1234
2233
3232
1234
我需要找到一种方法,使用脚本打印列表中项目的总频率,如下所示:

1234 2
2233 1
3232 1
[(3232, 1), (2233, 1), (1234, 2)]
defaultdict(<type 'int'>, {3232: 1, 2233: 1, 1234: 2})
有人能帮我解释一下吗

谢谢

您可以使用

下面的代码

from itertools import groupby

a = [
    1234,
    2233,
    3232,
    1234
]
print [(key, len(list(group))) for key, group in groupby(sorted(a))]
将为您提供:

[1234,2,2233,1,3232,1]

产出:

Counter({1234: 2, 3232: 1, 2233: 1})
说明:

这利用了。从技术上讲,它返回类似dict的对象,计数器是dict的子类。这意味着您可以执行以下操作:

print c[1234]
并得到一个结果

2
如果您不是在寻找类似字典的对象,那么另一个选择是构建包含值/计数对的元组列表

zip(Counter(l).keys(), Counter(l).values())
这将返回如下内容:

1234 2
2233 1
3232 1
[(3232, 1), (2233, 1), (1234, 2)]
defaultdict(<type 'int'>, {3232: 1, 2233: 1, 1234: 2})
计数器类是在Python2.7中添加的。根据您在另一个答案上发布的错误,您似乎正在使用2.6或更高版本。您可以升级到2.7,也可以利用Counter类的

您还可以使用和计算项目:

from collections import defaultdict

l = [1234,2233,3232,1234]
d = defaultdict(int)

for curr in l:
    d[curr] += 1

print d
d是一本类似于以下内容的词典:

1234 2
2233 1
3232 1
[(3232, 1), (2233, 1), (1234, 2)]
defaultdict(<type 'int'>, {3232: 1, 2233: 1, 1234: 2})
印刷品

2

使用collections.counter我试过了,但是出现了一个错误,说无法导入名称Counter@Russ,您使用的是什么版本的python?如果我没记错的话,计数器是在2.7中添加的,所以如果您有一个早期版本,这可能就是原因。@Russ您的错误与此类似吗?:ImportError:无法导入名称计数器是的,正如您和@Andy所说,我有2.6版,这就是它产生错误的原因。除了使用我的版本支持的计数器之外,还有其他方法吗?@Russ,我已经更新了我的答案的末尾,以包含有关使用collections模块中的defaultdict的信息。这是在2.5中引入的