counter 是一种特殊的字典,主要方便用来计数,key 是要计数的 item,value 保存的是个数。
1
2
3
4
|
from collections import Counter
>>> c = Counter( 'hello,world' )
Counter({ 'l' : 3 , 'o' : 2 , 'e' : 1 , 'd' : 1 , 'h' : 1 , ',' : 1 , 'r' : 1 , 'w' : 1 })
|
初始化可以传入三种类型的参数:字典,其他 iterable 的数据类型,还有命名的参数对。
1
2
3
4
5
6
7
8
9
|
| __init__( self , iterable = None , * * kwds)
| Create a new, empty Counter object . And if given, count elements
| from an input iterable. Or, initialize the count from another mapping
| of elements to their counts.
|
| >>> c = Counter() # a new, empty counter
| >>> c = Counter( 'gallahad' ) # a new counter from an iterable
| >>> c = Counter({ 'a' : 4 , 'b' : 2 }) # a new counter from a mapping
| >>> c = Counter(a = 4 , b = 2 ) # a new counter from keyword args
|
默认请求下,访问不存在的 item,会返回 0。Counter 可以用来统计某些数据的出现次数,比如一个很长的数字串 numbers = "67642192097348921647512014651027586741512651" 中每个数字的频率:
1
2
3
4
5
6
7
8
9
10
11
12
|
>>> c = Counter(numbers) # c 存储了每个数字的频率
>>> c.most_common() # 所有数字按照频率排序。如果 most_common 接受了 int 参数 n,将返回频率前n 的数据,否则会返回所有的数据
[( '1' , 8 ),
( '2' , 6 ),
( '6' , 6 ),
( '5' , 5 ),
( '4' , 5 ),
( '7' , 5 ),
( '0' , 3 ),
( '9' , 3 ),
( '8' , 2 ),
( '3' , 1 )]
|
此外,你还可以对两个 Counter 对象进行 +, -,min, max 等操作。
综合示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
print ( 'Counter类型的应用' )
c = Counter( "dengjingdong" )
#c = Counter({'n': 3, 'g': 3, 'd': 2, 'i': 1, 'o': 1, 'e': 1, 'j': 1})
print ( "原始数据:" ,c)
print ( "最多的两个元素:" ,c.most_common( 2 )) #输出数量最多的元素
print ( "d的个数:" ,c[ 'd' ]) #输出d的个数
print (c.values()) #输出字典的value列表
print ( sum (c.values())) #输出总字符数
print ( sorted (c.elements())) #将字典中的数据,按字典序排序
print ( '\n\n' )
"""
#删除所有d元素
del c['d']
b = Counter("dengxiaoxiao")
#通过subtract函数删除元素,元素个数可以变成负数。
c.subtract(b)
"""
"""
可以添加数据
b = Counter("qinghuabeida")
c.update(b)
"""
|