Counter是dict的一个子类,用来方便的计数
1.导入Conter模块
from collections import Counter
2.创建Counter
>>> c = Counter() #创建一个空Counter
>>> c
Counter()
****************************************************
>>> c = Counter(['A','B','D','A','B']) #通过迭代器创建一个Counter
>>> c
Counter({
'A': 2, 'B': 2, 'D': 1})
***************************************************
>>> c = Counter({
'yao':3,'xiao':5}) #通过映射创建
>>> c
Counter({
'xiao': 5, 'yao': 3})
******************************************
>>> c = Counter(yao=3,xiao=5) #通过关键字创建
>>> c
Counter({
'xiao': 5, 'yao': 3})
3.访问Counter
Counter实现了字典的__missing__方法,当访问不存在的key时,返回0
>>> c
Counter({
'xiao': 5, 'yao': 3})
>>> c['xiao']
5
>>> c['feng']
0
4.Counter常用方法
#elements:按照频次返回序列
>>> c = Counter(a=3,b=4,c=6)
>>> c
Counter({
'c': 6, 'b': 4, 'a': 3})
>>> list(c.elements())
['a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'c', 'c']
#按照统计的频次降序排列
>>> c.most_common(3)
[('c', 6), ('b', 4), ('a', 3)]
#对应key频次相减
>>> test1 = Counter(a=3,b=6,c=1)
>>> test2 = Counter(a=2,b=7,c=3)
>>> test1.subtract(test2)
>>> test1
Counter({
'a': 1, 'b': -1, 'c': -2})
#数学运算
>>> test1
Counter({
'b': 6, 'a': 3, 'c': 1})
>>> test2
Counter({
'b': 7, 'c': 3, 'a': 2})
>>> test1+test2 #对应key的value相加
Counter({
'b': 13, 'a': 5, 'c': 4})
>>> test1-test2 #对应key的value相减
Counter({
'a': 1})
>>> test1&test2 #求与,取key对应value较小的
Counter({
'b': 6, 'a': 2, 'c': 1})
>>> test1|test2 #求并,取key对应value较大者
Counter({
'b': 7, 'a': 3, 'c': 3})
#提取value值
>>> test1
Counter({
'b': 6, 'a': 3, 'c': 1})
>>> test1.values()
dict_values([3, 6, 1])
>>> sum(test1.values())
10
常见做法:
sum(c.values()) # 继承自字典的.values()方法返回values的列表,再求和
c.clear() # 继承自字典的.clear()方法,清空counter
list(c) # 返回key组成的list
set(c) # 返回key组成的set
dict(c) # 转化成字典
c.items() # 转化成(元素,计数值)组成的列表
Counter(dict(list_of_pairs)) # 从(元素,计数值)组成的列表转化成Counter
c.most_common()[:-n-1:-1] # 最小n个计数的(元素,计数值)组成的列表
c += Counter() # 利用counter的相加来去除负值和0的值