29 Python collections的使用

2017-01-13 10:52:07来源:网络收集作者:码农伯伯人点击

collections模块在内置数据类型(dict、list、set、tuple)的基础上,提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。


#!/usr/bin/python
# -*- coding: utf-8 -*-
from collections import *
'''defaultdict(default_factory),dict的子类,key不存在时会自动生成相应类型的value,
default_factory参数可以指定为list,set,int等各种合法类型'''
l = [('a',1),('a',2),('b',3),('b',4),('c',5)]
d = defaultdict(list)#默认为[]
for key,val in l:
d[key].append(val)
print d,d['e']
d = defaultdict(int) #默认为0
for key,val in l:
d[key] += 1
print d,d[1]
'''OrderedDict,有序字典,dict的子类,'''
l = {'a':1,'e':0,'c':2,'b':3}
#按照key排序
d = OrderedDict(sorted(l.items(),key = lambda t:t[0]))
print d
#按照value来排序
e = OrderedDict(sorted(l.items(),key = lambda t:t[1]))
print e
'''移除最后一个和第一个key-val'''
print d.popitem()
print d.popitem(last = False)
'''Counter,dict的子类,无序容器,可以看作是计数器,统计相关元素出现的个数,Counter对于不存在的元素会返回0
支持如下形式的初始化
c = Counter('hello')
c = Counter({'a':3,'b':19})
c = Counter(cats=2,dogs=1)
'''
c = Counter()
for i in [1,1,1,1,1,2,2,23,3,3,3,3]:
c[i] += 1
print c
'''list,单向链表,插入和删除元素很慢,deque为双向链表,适用于栈和队列,而且线程安全,使用deque在队列两端添加
append或pop时间复杂度为O(1),list中pop(0)和insert(0,val)为O(n)'''
q = deque(range(10))
q.appendleft(11)
q.append(12)
print q
print q.popleft()
print q.pop()
'''namedtuple,使用namedtuple(typename,field_names)命名tuple中的元素,有点像结构体... '''
Point = namedtuple('Point',('x','y'))
p = Point(1,2)
print p
print p.x,p.y
#p.x = 3,AttributeError: can't set attribute,保留了元组的特性,不能更改元组中的值

参考网址http://blog.csdn.net/u013291394/article/details/50469609

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台