collection模块额外提供了几种高级数据类型:
tuple是一个不可变集合,namedtuple用来构建一个自定义的tuple对象,并且规定了tuple元素的个数,可通过属性而不是索引来引用tuple的某个元素,我们可以通过namedtuple很方便的自定义一个数据类型,它具有tuple的不变属性又可以根据属性来引用。
from collections import namedtuple
point = namedtuple('point',['x','y'])
p = point(2,1)
print(p)
print("x=",p.x)
print("y=",p.y)
# 结果如下
x=2
y=1
isinstance(p,point)
True
isinstance(p,tuple)
True
类似创建一个圆,通过坐标,半径r,用namedtuple构建
Circle = nametuple('circle',['x','y','r'])
dict中key是无序的,在做迭代时,无法确认key的顺序。ordereddict是对字典类型的补充,他记住了字典元素添加的顺序。
from collections import OrderedDict
od = OrderedDict([('a', 1), ('z', 2), ('c', 3)])
print od
d = dict([('a',1),('z',2),('c',3)])
print d
# 结果如下
OrderedDict([('a', 1), ('z', 2), ('c', 3)])
{'a': 1, 'c': 3, 'z': 2}
defaultdict是对字典类型的补充,它默认给字典的值设置了一个类型
在使用python原生的数据结构dict的时候,如果用d[key]这样的方式访问,当指定的key不存在时,是会抛出keyerror异常,但是,如果使用defaultdict,只要传入一个默认的工厂方法,那么请求一个不存在的key时,便会调用这个工厂方法使其结果来作为这个key的默认值。
counter是对字典类型的补充,用于追踪值出现的次数,具备字典的所有功能+自己的功能
from collections import Counter
c = Counter(['11','22','11','33','11','44','55'])
c2 = Counter("abcdefdasfdsafaf")
print c
print c2
# 结果如下
Counter({'11': 3, '33': 1, '44': 1, '22': 1, '55': 1})
Counter({'a': 4, 'f': 4, 'd': 3, 's': 2, 'c': 1, 'b': 1, 'e': 1})