$python collections库
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'})												
												
随机推荐
- 编程之美 set 18 拈两堆石子游戏(3)
			
题目 假设有两堆石头, 有两个玩家按照如下规则轮流取石头 每个人每次可以从两堆石头中取出数量相等的石头, 或者仅从一堆石头中取出任意数量的石头 最后把剩下的石头依次拿光的人取胜 首先取石头的人能否赢得 ...
 - java框架---->RxJava的使用(一)
			
RxJava是响应式程序设计的一种实现.在响应式程序设计中,当数据到达的时候,消费者做出响应.响应式编程可以将事件传递给注册了的observer.今天我们就来学习一下rxJava,并分析一下它源码感受 ...
 - hdu1059(多重背包优化)
			
使用一种二进制的优化, 可以完美的解决这题,<背包九讲>中说的非常好 但是还有一种线性复杂的算法. 应该算是该题很巧妙的解法 ;i++) { ;l--) { ) continue; ;k& ...
 - Redesign Your App for iOS 7 之 页面布局
			
Redesign Your App for iOS 7 之 页面布局 http://www.vinqon.com/codeblog/?detail/11109
 - fopen()函数文件模板中w,w+,a,a+的区别
			
"w" 写入方式打开,将文件指针指向文件头并将文件大小截为零.如果文件不存在则尝试创建之. "w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零.如果 ...
 - c#基础   第六讲
			
烧开水 先询问:“是否要烧开水(Y/N)” 是的话执行--0°--100°(30°---水温了,50°---水热了,80°---水快开了,100°---水已经开了, 结束.) 判断 循环 选择 跳转 ...
 - ios 对日期的处理(包括计算昨天时间、明天时间)
			
NSDate存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间 Dates NSDate类提供了创建date,比较date以及计算两个date之间间隔的功能.Date对象是不可改变的. 如 ...
 - mysql数据的导入与导出
			
参考:http://blog.sina.com.cn/s/blog_81b2b2a1010188q0.html http://blog.csdn.net/xin_yu_xin/article/det ...
 - Linux系统时间快8个小时
			
1.vi /etc/sysconfig/clock #编辑文件ZONE="Asia/Shanghai"UTC=false #设 ...
 - XML 配置里的 Bean 自动装配
			
在XML文件中,先看一下下面的代码: <bean id="student" class="com.jeremy.spring.beans.student" ...