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模塊中的經常使用集合類。