Python collectioins
collections是一个python的内建模块,提供了一些除了dict、list、tuble、等常见的数据类型之外的一些集合类
参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017681679479008
namedtuble
namedtuble 是一个函数,可以用来创建自定义的tuble对象,使用改函数创建的对象 即保留了tuble的不可变性,有能通过属性访问的可命名的数据类型
>>> from collections import namedtuple
>>> namedtuple('名称',['属性名称'])
>>> Point = namedtuple('Point', ['x', 'y'])
>>> p = Point(1, 2)
>>> p.x
1
>>> p.y
2
deque
是为了高效实现插入和删除的双向列表,适合用于队列和栈,因为list是单向链表,由于线性存储的原因,在数据量大的情况下进行插入和删除的时候就没有访问时候的高效性
>>> from collections import deque
>>> q = deque(['a', 'b', 'c'])
>>> q.append('x')
>>> q.appendleft('y')
>>> q
deque(['y', 'a', 'b', 'c', 'x'])
  deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。
defaultdict
  使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict:
>>> from collections import defaultdict
>>> dd = defaultdict(lambda: 'N/A')
>>> dd['key1'] = 'abc'
>>> dd['key1'] # key1存在
'abc'
>>> dd['key2'] # key2不存在,返回默认值
'N/A'
OrderedDict
  如果要保持Key的顺序,可以用OrderedDict:
>>> from collections import OrderedDict
>>> d = dict([('a', 1), ('b', 2), ('c', 3)])
>>> d # dict的Key是无序的
{'a': 1, 'c': 3, 'b': 2}
>>> od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
>>> od # OrderedDict的Key是有序的
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
  注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:
  OrderedDict可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key:(略参考链接有实现)
ChainMap
ChainMap把多个dict组成一个逻辑上的dict,当访问数据的时候,它本身也是一个dict,但是在访问数据时,会按顺序在不同的dict之间
  什么时候使用ChainMap最合适?举个例子:应用程序往往都需要传入参数,参数可以通过命令行传入,可以通过环境变量传入,还可以有默认参数。我们可以用ChainMap实现参数的优先级查找,即先查命令行参数,如果没有传入,再查环境变量,如果没有,就使用默认参数。
使用方法见参考链接
Counter
  Counter是一个简单的计数器,例如,统计字符出现的个数
>>> from collections import Counter
>>> c = Counter()
>>> for ch in 'programming':
... c[ch] = c[ch] + 1
...
>>> c
Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1})
从结果可以看出,counter也是dict的一个子类
Python collectioins的更多相关文章
- Python常用内建模块和第三方库
		目录 内建模块 1 datetime模块(处理日期和时间的标准库) datetime与timestamp转换 str与datetime转换 datetime时间加减,使用timedelta这个类 转 ... 
- Python中的多进程与多线程(一)
		一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ... 
- Python高手之路【六】python基础之字符串格式化
		Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ... 
- Python 小而美的函数
		python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ... 
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
		软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ... 
- 可爱的豆子——使用Beans思想让Python代码更易维护
		title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ... 
- 使用Python保存屏幕截图(不使用PIL)
		起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ... 
- Python编码记录
		字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ... 
- Apache执行Python脚本
		由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ... 
随机推荐
- Python【day 14-3】二分法查找
			#二分法查找 #方法1 循环+左右边界变动,两者差减半 #方法2 递归+新列表长度减半 #方法3 递归+左右边界变动,两者差减半 #方法1 循环+左右边界变动,两者差减半 def recursion1 ... 
- 易优CMS:type的基础用法
			[基础用法] 名称:type 功能:获取指定栏目信息 语法: {eyou:type typeid='栏目ID' empty='暂时没有数据'} <a href="{$field.typ ... 
- JavaWeb之servlet(2)
			servlet(2) ServletContext servlet的上下文 每个jvm的虚拟机中的每个web工程都只有一个ServletContext工程,即在一个web工程中,无论写了多少个Java ... 
- 初始HTML_表格
			Html表格 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ... 
- iOS安全攻防(二):后台daemon非法窃取用户iTunesstore信息
			转自:http://blog.csdn.net/yiyaaixuexi/article/details/8293020 开机自启动 在iOS安全攻防(一):Hack必备的命令与工具中,介绍了如何编译自 ... 
- [视频教程] 如何在docker环境下的纯净ubuntu系统中安装最新版nginx
			视频地址: https://www.bilibili.com/video/av68984490/ 笔记: 1.拉取ubuntu镜像并运行 docker pull ubuntudocker run -i ... 
- ue4 FString 中文乱码问题
			使用FString出现乱码,最简单的情况,FString Str = "你好"; 这时候就会出现乱码,解决方法是改成这样 FString Str = TEXT("你好&q ... 
- c#_sort排序函数的返回值
			C# List.Sort函数的返回值 值 含义 小于零 left在right的前面 零 位置不变 大于零 right在left的前面 示例: 本测试结果在unity3d 和纯C#环境下执行. List ... 
- C++:基本类型的转换
			C++:基本类型的转换 一.string转为int [参考:https://blog.csdn.net/m0_37316917/article/details/82712017] string num ... 
- luoguP4404缓存交换
			https://www.luogu.org/problem/P4404 题意 你有一个大小为n的缓存区,有个长度为m的查询序列. 每次查询的时候需要把查询值放入缓存,若缓存已满,则先删除任一位置再将其 ... 
