Python中内置了4种数据类型,包括:list,tuple,set,dict,这些数据类型都有其各自的特色,可是这些特色(好比dict无序)在必定程度上对数据类型的使用产生了约束,在某些使用场景下效率会比较低,好比有时候咱们可能须要维护一个有序的字典等状况。
在这种场景下咱们可使用Python内建的collections模块,它包括了不少有用的集合类,合理的使用能够提升咱们代码的运行效率。数组
接下来主要对collections模块中的经常使用集合类进行介绍,调用collections模块:安全
from collections import *
dict在使用时,当key值不存在时,直接添加value时会出现错误,使用defaultdict能够很好的规避该错误。defaultdict是对字典类型的补充,它能够给字典的值设置一个类型,当key不存在时能够自动生成相应类型的value。
举例:app
from collections import defaultdict test_data = ( ('cat', 2), ('dog', 5), ('sheep', 3), ('cat', 1), ('sheep', 2) ) test_data_dict = defaultdict(list) for name, num in test_data: test_data_dict[name].append(num) print test_data_dict
在Python3.6以前的字典是无序的,可是有时候咱们须要保持字典的有序性,orderDict能够在dict的基础上实现字典的有序性,这里的有序指的是按照字典key插入的顺序来排列,这样就实现了一个先进先出的dict,当容量超出限制时,先删除最先添加的key。
举例:线程
#orderedDict original_dict = {'a': 2, 'b': 4, 'c': 5} for key, value in original_dict.items(): print key, value ordered_dict = OrderedDict([('a', 2), ('b', 4), ('c', 5)]) for key, value in ordered_dict.items(): print key, value
能够看到orderDict是按照字典建立时的插入顺序来排序。code
Python中的list是基于数组实现的,因此,查找容易,可是插入和删除操做时间复杂度较大。
deque就是为了高效实现插入和删除操做的双向列表,适合用于队列和栈,并且线程安全。
list只提供了append和pop方法来从list的尾部插入或者删除元素,deque新增了appendleft/popleft等方法能够更高效的在元素的开头来插入/删除元素。
举例:对象
from collections import deque d = deque([1,2,3,4,5]) d.extendleft([0]) print d d.extend([6,7]) d.popleft() print d
能够进行双向操做元素,十分方便。排序
字典子类,为能够哈希的对象计数。
举例:索引
from collections import Counter test_counter_data = ['cat', 'dog', 'sheep', 'cat', 'dog'] counter_data = Counter() for item in test_counter_data: counter_data[item] += 1 print counter_data
能够实现对一个对象中的元素进行计数。队列
元组子类。
咱们知道,Python中元组的一个重要特征就是元素不可增删改,而查找tuple元素时通常采起索引。
使用namedtuple(typename, field_name)能够命名tuple中的元素,以后即可使用名字来查找tuple中的值,有点相似于字典中的查找。
举例:文档
from collections import namedtuple animal = namedtuple('animal', 'type age') mark = animal(type='dog', age=2) print mark.type
使用namedtuple能够提升代码的可读性和文档性。
以上,是collections模块中的经常使用集合类。