python内置模块之collections(六)
前言
collections是Python内建的一个集合模块,提供了许多有用的集合类。
系列文章
OrderedDict
有序字典,相当于键值对列表;按照创建时的顺序保持不变。
方法:继承了dict结构,有其父类的所有的方法。
import collections
dt = {'a':1,'b':2,'c':3}
o_dict = collections.OrderedDict(dt)
# 通用方法
print(o_dict.keys()) # 返回字典所有的键顺序列表
print(o_dict.items()) # 返回字典键值对元组组成的列表
print(o_dict.values()) # 返回字典所有的值组成的列表
print(o_dict.get('a')) # 返回以键查找的值,没有返回None
print(o_dict.pop('a')) # 以键弹出一个键值对
print(o_dict.clear()) # 清空字典,返回None
print(o_dict.copy()) # 复制一个新的字典
print(o_dict.update({'a':2})) # 更新字典,没有添加新的,有就更新
print(o_dict.setdefault('h', 9)) # 获取一个键的值,如果没有用默认值替代同时加入到字典,有直接返回值
print(o_dict.fromkeys(['a', 'f', 'g'], value=10)) # 创建一个值相同的字典,和原来的字典无关,类方法
# 特殊方法
print(o_dict.popitem(last=True)) # 以元组的方式从右端弹出键值对,last=False从左边弹出
print(o_dict.move_to_end('a', last=True)) # 将一个键值对移到字典的末尾
defaultdict
import collections
dt = {'a':1,'b':2,'c':3}
# 可接受一个数据类型或无参数函数作为初始化
o_dict = collections.defaultdict(list)
o_dict1 = collections.defaultdict(lambda :10)
print(o_dict)
print(o_dict['a'].append(1)) # 默认所有的值都是列表
print(o_dict.get('a')) # 如果键存在,默认值为10
print(o_dict1)
namedtuple
namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。
import collections
# 返回一个tuple类型,可以通过自定义的属性访问而不是索引
User = collections.namedtuple('User', ['age','name'])
user = User(19,'xiaoming')
print(user.name)
print(user.age)
deque
- 双向列表,可以看做一个简单的队列,可以高效地插入和删除数据。支持列表形式的索引取值,不支持切片。
import collections
l = ['a', 'b', 'c']
dq = collections.deque(l)
print(dq.append('c')) # 从右边插入
print(dq.appendleft('c')) # 从左边插入
print(dq.pop()) # 从右边弹出
print(dq.popleft()) # 从左边弹出
print(dq.rotate(3)) # 当参数为正,从右边数n个移到左边;参数为负数时,从左边移动
Counter
- 一个简单的计数器,统计元素出现的次数,本质也是一个字典。该方法支持各种对字符串的统计;支持加减和交并运算.
import collections
l = 'ffdsgdfgasfsghdgdaf'
c = collections.Counter(l) # 直接生成以字符为键,个数为值的字典,值必须为int
print(c.most_common(3)) # 输出排名前3的元组列表
print(list(c.elements())) # 输出字符列表,从多到少
print(c.subtract('fsdfsfsf')) # 计算相减,得到相减后的字典
print(c)
ChainMap
- 增删改的操作都只会针对该对象的第一个字典,其余字典不会发生改变,但是如果是查找,则会在多个字典中查找,直到找到第一个出现的key为止。
import collections
dt1 = {'a':1, 'b':2}
dt2 = {'c':1, 'd':2}
c = collections.ChainMap([dt1, dt2]) # 创建一个映射视图将多个字典合在一起
# 特殊的方法
print(c.maps) # 返回所有的字典列表
# 在字典列表头部插入字典,如果其参数为空,则会默认插入一个空字典,并且返回一个改变后的ChainMap对象
print(c.new_child({'a':1}))
- 作者:天宇之游
- 出处:http://www.cnblogs.com/cwp-bg/
- 本文版权归作者和博客园共有,欢迎转载、交流,但未经作者同意必须保留此段声明,且在文章明显位置给出原文链接。
python内置模块之collections(六)的更多相关文章
- python内置模块collections介绍
目录 python内置模块collections介绍 1.namedtuple 2.deque 3.defaultdict 4.OrderedDict 5.ChainMap 6.Counter 7.小 ...
- Python内置模块(re+collections+time等模块)
Python内置模块(re+collections+time等模块) 1. re模块 import re 在python要想使用正则必须借助于模块 re就是其中之一 1.1 findall功能( re ...
- Python开发【第六篇】:模块
模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
- python内置模块(4)
这一部分是python内置模块系列的最后一部分,介绍了一些小巧有用的内置模块. 目录: 1.random 2.shelve 3.getpass 4.zipfile 5.tarfile 6.bisect ...
- python内置模块[sys,os,os.path,stat]
python内置模块[sys,os,os.path,stat] 内置模块是python自带功能,在使用内置模块时,需要遵循 先导入在 使用 一.sys 对象 描述 sys.argv 命令行参数获取,返 ...
- python基础篇(六)
PYTHON基础篇(六) 正则模块re A:正则表达式和re模块案例 B:re模块的内置方法 时间模块time A:时间模块的三种表示方式 B:时间模块的相互转换 随机数模块random A:随机数模 ...
- python模块介绍- collections(5)-OrderedDict 有序字典
1.3.5 OrderedDict 有序字典 OrderedDict是dict的子类,它记住了内容添加的顺序. import collections print 'Regular dictionary ...
- python学习笔记(六)文件夹遍历,异常处理
python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...
- Python学习笔记(六)
Python学习笔记(六) Ubuntu重置root密码 Ubuntu 16.4 目录结构 Ubuntu 命令讲解 1. Ubuntu重置root密码 启动系统,显示GRUB选择菜单(如果默认系统启动 ...
随机推荐
- MT【24】一道五次方程的求根题
解答: 评:一般的五次及以上的多项式方程是无根式解的,只能用计算机去精确到某某位.但是特殊的比如$x^5=1$显然有根式解,本题就是一个不平凡的特殊的例子,这里的代换用于求解三次方程的求根过程是一样的 ...
- Raid卷详解
#RAID卷 独立磁盘冗余阵列RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术.组成磁盘阵列的不同方式成为R ...
- luogu4932 浏览器 (拆)
分析1的个数的奇偶性: 奇xor奇=偶xor偶=偶 奇xor偶=奇 所以只要统计1的个数是奇数的数的个数 和 是偶数的个数 乘一起就行了 直接用bitset来做,虽然常数很小/数据随机可以过,但复杂度 ...
- cf500E New Year Domino (倍增)
先用线段树处理出推倒某一个后能覆盖到的最右端的位置R(绝对不能是最右边的那个骨牌,因为有可能右面的很短,左面的巨长(R不随L单调),后面算花费又需要用到这个位置),之后可以花费R到第一个比R大的左端点 ...
- Coablt strike官方教程中文译版本
安装和设置 系统要求 Cobalt Strike的最低系统要求 2 GHz +以上的cpu 2 GB RAM 500MB +可用空间 在Amazon的EC2上,至少使用较高核数的CPU(c1.medi ...
- jar的打包与共享
做成jar包的,有个弊处,打包apk时会暴露源码,当然也有解决方案,放在最后讲. 先来解释如何生成jar: 新建工程,将工程编译至无错,右键工程Export... 在弹出的提示框中选择Java文件夹下 ...
- java反射出字段信息和值
/** * */ package test; import java.lang.reflect.Field; import java.lang.reflect.Modifier; /** * @aut ...
- 树链剖分&dfs序
树上问题 很多处理区间的问题(像是RMQ,区间修改).可以用线段树,树状数组,ST表这些数据结构来维护.但是如果将这些问题挪到了树上,就不能直接用这些数据结构来处理了.这时就用到了dfs序和树链剖分. ...
- 快速幂&快速乘法
尽管快速幂与快速乘法好像扯不上什么关系,但是东西不是很多,就一起整理到这里吧 快速幂思想就是将ax看作x个a相乘,用now记录当前答案,然后将指数每次除以2,然后将当前答案平方,如果x的2进制最后一位 ...
- ORACLE常用性能监控SQL
Temp表空间上进程的查询 select a.tablespace, b.sid, b.serial#, a.blocks,c.sql_text from v$sort_usage a,v$sessi ...