在内置数据类型(dict , list , set , tuple
)的基础上,collection模块还提供了几个额外的数据类型:Counter deque defaultdict namedtuple OrderedDict.
namedtuple
:生产可以使用名字来访问元素内容的tuplefrom collections import namedtuple Point = namedtuple('Point',['x','y']) p = Point(1,2) print(p.x,p.y) # 1 2
deque
: 双端队列,可以快速的从另外一侧追加和退出对象# 使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。 # deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈: from collections import deque q = deque(['a','b','c']) q.append('d') q.appendleft(0) print(q) deque([0, 'a', 'b', 'c', 'd']) deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。
Counter
: 计数器,主要用来计数# Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。 from collections import Counter s = Counter('asgfdg') print(s) Counter({'g': 2, 'a': 1, 's': 1, 'f': 1, 'd': 1})
OrderedDict
: 有序字典# 使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。如果要保持Key的顺序,可以用OrderedDict: from collections import OrderedDict d = dict([('a', 1), ('b', 2), ('c', 3)]) print(d) # dict 的字典是无序的 od = OrderedDict([('a', 1), ('b', 2), ('c', 3)]) print(od) # OrderedDict的字典是有序的 OrderedDict([('a', 1), ('b', 2), ('c', 3)])
defaultdict
: 带有默认值的字典from collections import defaultdict values = [11,22,33,44,55,66,77,88,99] dic = defaultdict(list) for i in values: if i > 66: dic['key1'].append(i) else: dic['key2'].append(i) print(dic) defaultdict(<class 'list'>, {'key2': [11, 22, 33, 44, 55, 66], 'key1': [77, 88, 99]}) # 原生字典的解决方法 l = [11,22,33,44,55,66,77,88,99] dic = {} for i in l: if i > 66: if 'key1' not in dic: dic['key1'] = [] dic['key1'].append(i) else: if 'key2' not in dic: dic['key2'] = [] dic['key2'].append(i) print(dic) {'key2': [11, 22, 33, 44, 55, 66], 'key1': [77, 88, 99]}