collections库是python内置的集合库,本文主要讲解以下5种数据结构的用法:

  • namedtuple 命名元组,是tuple的子类
  • deque 双向列表
  • defaultdict 有默认值的字典,是dict的子类
  • OrderedDict key有序的字典,是dict的子类
  • Counter 计数器,是dict的子类

准备工作

from collections import namedtuple,deque,defaultdict,OrderedDict,Counter

namedtuple (python 2.6+)

用法:namedtuple('名称',[属性列表])

Point = namedtuple('Point',['x','y'])
p = Point(1,2)
print '【Output】'
print p
print p.x,p.y
print p.count,p.index
print isinstance(p,Point)
print isinstance(p,tuple)
【Output】
Point(x=1, y=2)
1 2
<built-in method count of Point object at 0x038B2288> <built-in method index of Point object at 0x038B2288>
True
True

deque (python 2.4+)

适用于队列和栈,插入和删除元素很高效。

lst = ['a','b','c']
dq = deque(lst)
dq.append('d')
print dq
deque(['a', 'b', 'c', 'd'])
dq.pop()
'd'
print dq
deque(['a', 'b', 'c'])
dq.appendleft('-1')
print dq
deque(['-1', 'a', 'b', 'c'])
dq.popleft()
'-1'
print dq
deque(['a', 'b', 'c'])

defaultdict (python 2.5+)

当key不存在的时候可返回一个默认值,默认值由传入的函数对象决定。

dd = defaultdict(lambda:'N/A')
dd['key1'] = 'aa';
print dd['key1']
print dd['key2']
aa
N/A

OrderedDict(python 2.7+)

key值有序的字典,顺序按照插入的顺序排序。

data = [('a',1),('b',2),('c',3)]
d = dict(data)
print d
{'a': 1, 'c': 3, 'b': 2}
od = OrderedDict(data)
print od
OrderedDict([('a', 1), ('b', 2), ('c', 3)])

Counter (python 2.7+)

用序列生成Counter对象

s = 'abcdeabcdabcaba'
c = Counter(s)
print c
Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
print c.most_common(3)
[('a', 5), ('b', 4), ('c', 3)]
print sorted(c)
['a', 'b', 'c', 'd', 'e']
print ''.join(sorted(c.elements()))
aaaaabbbbcccdde
print c.values()
[5, 3, 4, 1, 2]
print c.elements()
<itertools.chain object at 0x039BC630>

更新Counter对象

d = Counter('bbb')
c.update(d)
print c.most_common()
[('b', 7), ('a', 5), ('c', 3), ('d', 2), ('e', 1)]

用字典生成Counter对象

d = {'a':1,'b':2,'c':3}
c = Counter(d)
print c
Counter({'c': 3, 'b': 2, 'a': 1})

value值为字符串时,按照字典序排序

d = {'a':'aa1','b':'ba1','c':'ca2'}
c = Counter(d)
print c
Counter({'c': 'ca2', 'b': 'ba1', 'a': 'aa1'})

最新文章

  1. install LLVM
  2. 基于吉日嘎拉的通用权限管理Webform版老界面bug修复
  3. Low Power Consumption Design --- MCU Attention
  4. spark.SecurityManager: SecurityManager: authentication disabled
  5. Data truncation: Truncated incorrect DOUBLE value 解决方案
  6. AMD 和 CMD as lazy as possible
  7. C++获得系统路径
  8. Linux SSH端口转发
  9. C#实现RSA加密和解密详解
  10. apache php 配置 CI 框架
  11. SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确
  12. PDF 补丁丁 0.6.0.3369 版发布(修复保存文件时文件名替代符失效的问题)
  13. block diagonal matrix 直和 块对角矩阵 不完美 有缺陷 缩放 射影几何
  14. php优秀框架codeigniter学习系列——constants.php
  15. (3.11)mysql基础深入——mysql文件分类与配置文件管理
  16. SQLserver查看索引使用情况
  17. 批量快速的导入导出Oracle的数据(spool缓冲池、java实现)
  18. tomcat启动时,报java.io.EOFException
  19. PHP设置会话(Session)超时过期时间实现登录时间限制[转]
  20. android欢迎页

热门文章

  1. Unreal新建C++类或C++项目失败
  2. 【BZOJ2565】最长双回文串 Manacher
  3. 160524、Linux下如何启动、关闭Oracle以及打开关闭监听
  4. java环境变量、集成开发环境与使用两个类
  5. ubuntu下安装myeclipse+破解
  6. HDU1811 拓扑排序判环+并查集
  7. uitextFiled字数输入限制
  8. python的@classmethod和@staticmethod
  9. Spring Data 查询方法的规则定义(五)
  10. QT in VS 多语言实现(中英文切换,每个步骤都有截图,只有UTF8才能让Qt语言家正确读取。先qApp-&gt;removeTranslator,然后installTranslator,每个类都要写上槽函数RetranslateUI)