Python中的collections模塊 Python中的collections模塊

Python中的collections模塊

 

Python中內置了4種數據類型,包括:list,tuple,set,dict,這些數據類型都有其各自的特點,但是這些特點(比如dict無序)在一定程度上對數據類型的使用產生了約束,在某些使用場景下效率會比較低,比如有時候我們可能需要維護一個有序的字典等情況。
在這種場景下我們可以使用Python內建的collections模塊,它包括了很多有用的集合類,合理的使用可以提高我們代碼的運行效率。

接下來主要對collections模塊中的常用集合類進行介紹,調用collections模塊:

from collections import *

defaultdict

dict在使用時,當key值不存在時,直接添加value時會出現錯誤,使用defaultdict可以很好的規避該錯誤。defaultdict是對字典類型的補充,它可以給字典的值設置一個類型,當key不存在時可以自動生成相應類型的value
舉例:

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

orderedDict

在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是按照字典創建時的插入順序來排序。

deque

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

可以進行雙向操作元素,十分方便。

Counter

字典子類,爲可以哈希的對象計數。
舉例:

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

可以實現對一個對象中的元素進行計數。

namedtuple

元組子類。
我們知道,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模塊中的常用集合類。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章