collections模块的Counter类

简介: collections模块自Python 2.4版本开始被引入,包含了dict、set、list、tuple以外的一些特殊的容器类型,分别是:OrderedDict类:排序字典,是字典的子类。

collections模块自Python 2.4版本开始被引入,包含了dict、set、list、tuple以外的一些特殊的容器类型,分别是:

OrderedDict类:排序字典,是字典的子类。引入自2.7。
namedtuple()函数:命名元组,是一个工厂函数。引入自2.6。
Counter类:为hashable对象计数,是字典的子类。引入自2.7。
deque:双向队列。引入自2.4。
defaultdict:使用工厂函数创建字典,使不用考虑缺失的字典键。引入自2.5。

Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。

from collections import Counter
c1=Counter('abcdefgacdiabc')
print(c1['a'])  # 3
print(c1['p'])  # 0
c2=Counter('with')
c2.update('within')
print(c2['w'])  #2
print(c2['i'])  #

# 减少则使用subtract()
c2.subtract('ww')
print(c2['w'])  # 0
# 键的删除 当计数值为0时,并不意味着元素被删除,删除元素应当使用del
c1['a'] = 0
print(c1)   # Counter({'c': 3, 'd': 2, 'b': 2, 'g': 1, 'e': 1, 'i': 1, 'f': 1, 'a': 0})
del c1['a']
print(c1)   # Counter({'c': 3, 'd': 2, 'b': 2, 'e': 1, 'i': 1, 'f': 1, 'g': 1})
# elements()
c3=Counter(a=4,b=2,c=1,d=0)
print(type(c3.elements()))  # <class 'itertools.chain'>
print(list(c3.elements()))  # ['c', 'a', 'a', 'a', 'a', 'b', 'b']
c4=Counter(a=4,b=2,c=1,d=-2)
print(list(c4.elements()))  # ['c', 'a', 'a', 'a', 'a', 'b', 'b']
#most_common([n]) 返回一个TopN列表。如果n没有被指定,则返回所有元素。当多个元素计数值相同时,排列是无确定顺序的。
print(c1.most_common()) # [('c', 3), ('b', 2), ('d', 2), ('f', 1), ('e', 1), ('i', 1), ('g', 1)]
print(c1.most_common(3))    # [('c', 3), ('d', 2), ('b', 2)]

Counter 常用操作

sum(c.values())  # 所有计数的总数
c.clear()  # 重置Counter对象,注意不是删除
list(c)  # 将c中的键转为列表
set(c)  # 将c中的键转为set
dict(c)  # 将c中的键值对转为字典
c.items()  # 转为(elem, cnt)格式的列表
Counter(dict(list_of_pairs))  # 从(elem, cnt)格式的列表转换为Counter类对象
c.most_common()[:-n:-1]  # 取出计数最少的n个元素
c += Counter()  # 移除0和负值
目录
相关文章
阿里商旅-国内商旅界的未来,今天聊聊阿里商旅是如何做业务的
阿里商旅是如何做业务的 基于钉钉的智能移动差旅1.0版本;开放平台对接方案2.0版本
阿里商旅-国内商旅界的未来,今天聊聊阿里商旅是如何做业务的
|
监控 数据可视化 Go
实战 | Telegraf+ InfluxDB+Grafana 搭建服务器性能监控平台
在之前的文章《移动端UI自动化过程中的难点及应对策略》中我们讨论了影响移动端自动化稳定性的一些因素,其中宿主机环境是一个不可忽视的问题,大家都知道移动端的自动化一般都需要将设备挂载到实体服务器上运行,如果服务器宿主机出现断网或者磁盘空间不足等情况,都会在一定程度上影响自动化任务的执行,因此今天跟大家分享一下如何做服务器宿主机的监控。
622 0
实战 | Telegraf+ InfluxDB+Grafana 搭建服务器性能监控平台
|
Android开发 开发工具 git
Android USB转串口通信
一、引用 1、Git上最火的USB转串口通信 2、Android之USB转串口通信 3、安卓开发中的USB转串口通讯 二、截图 废话不多说,先上图,micro usb -> usb 连接的测试温度的外设(其实是个测试粮油品质的,还有TPM值等等) usb_connect.png 三、流程 1、mainfest中注册监听USB拔插动作并且过滤对应vid,pid的设备。
4996 0
|
XML JSON 缓存
【基于HTTP的远程调用框架 一】深度详解Retrofit2框架概念和使用
【基于HTTP的远程调用框架 一】深度详解Retrofit2框架概念和使用
954 0
|
Java 数据库连接 数据库
第08篇:Mybatis事务处理
Java JDK中提供了标准接口`Connection`,不同的数据库驱动负责具体的实现。后面无论是`Spring`还是`Mybatis`对事务的处理,无论怎么的封装,最终究其到底都是由`Connection`来提供的能力。
499 0
第08篇:Mybatis事务处理
|
存储 SQL 消息中间件
数仓建设 | ODS、DWD、DWM等理论实战(好文收藏)
数仓建设 | ODS、DWD、DWM等理论实战
3221 1
数仓建设 | ODS、DWD、DWM等理论实战(好文收藏)
|
存储 传感器 机器学习/深度学习
树莓派踩坑备忘录 --使用Linux
树莓派踩坑备忘录 --使用Linux
377 0
树莓派踩坑备忘录 --使用Linux
|
数据安全/隐私保护
【最全】PS各个版本下载安装及小试牛刀教程(PhotoShop CS3 ~~ PhotoShop 2022)
【最全】PS各个版本下载安装及小试牛刀教程(PhotoShop CS3 ~~ PhotoShop 2022)
1165 0
【最全】PS各个版本下载安装及小试牛刀教程(PhotoShop CS3 ~~ PhotoShop 2022)
|
缓存 安全
3.2计算机网络(停止-等待协议 后退N帧协议 选择重传协议)
1.停止-等待协议 1.概念 2.停等协议——无差错情况
3.2计算机网络(停止-等待协议 后退N帧协议 选择重传协议)
|
存储 供应链 Java
细说Dataphin概念建模
Dataphin 3.6 版本主题域管理和业务实体管理做了重大升级: 1. 支持多级主题域, 且支持树形图展示多级主题域. 2. 定义业务实体时, 同时定义实体关系, 并提供"实体关系图"更好的呈现实体关系. 本文将细说概念模型.