29 Python collections的使用

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值