python-collections.counter
原文:https://docs.python.org/zh-cn/3.11/library/collections.html?highlight=defaultdict#collections.Counter
github:https://github.com/python/cpython/blob/main/Doc/library/collections.rst#id13
原文介绍中:counter就是python:dict的子类,特殊地方在于value值只能是整数(包括0和负数),并且只能统计可以被hash计算的元素。
本质就是可以将任何列表字符串方便的转换为计数字典。
初始化
collections.counter(iterable, map, keyword_args), 三种方式:可迭代对象,映射对象,关键字参数
from collections import Counter
# 方式一,可迭代对象,list, string,
c1 = Counter("soft apple")
'''
Counter({'p': 2,
's': 1,
'o': 1,
'f': 1,
't': 1,
' ': 1,
'a': 1,
'l': 1,
'e': 1})
'''
# 方式二,map对象,dict
c2 = Counter({'red':4, 'blue':2})
'''
Counter({'red': 4, 'blue': 2})
'''
# 方式三, 关键字参数
c3 = Counter(yellow=4, orange=2)
'''
Counter({'yellow': 4, 'orange': 2})
'''
增加
counter有一个非常方便的特性,如果查询不到会返回零。那么以下场景会非常方便。
cnt = Counter()
for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
cnt[word] += 1
# 使用原始dict各方面的不方便。
cdict = {}
for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
cdict[word] = cdict.get(word, 0) + 1
'''
cnt
Counter({'blue': 3, 'red': 2, 'green': 1})
'''
常用方法:
c1 = Counter('red'=4, 'blue'=2)
c2 = Counter('red'=5, 'blue'=3)
# substract/update
c1.substract(c2) # 就是c1 - c2
c1.update(c2) # 就是c1 + c2
# total
c1.total() # 所有values综合
# clear
c1.clear() # 所有value归零
# list(c1)
list(c1) # ['red', 'blue'],只返回键
# set(c1)
set(c1) # {'blue', 'red'}
# dict(c1)
dict(c1) # {'red': 4, 'blue': 2}
# items()
c1.items() # [(key, value), ...(key, value)]
# most_common()
c1.most_common(1) # [('red', 4)]
c1.most_common()[::-1] # [('blue', 2), ('red', 4)]
# +c
+c1 # 去除掉value为零或负数的键值对。