collections模塊是Python的內(nèi)建模塊之一,它實(shí)現(xiàn)了特殊的容器數(shù)據(jù)類型乎芳,提供了Python內(nèi)建的數(shù)據(jù)類型dict遵蚜、list、set奈惑、和tuple的高效替代選擇吭净。
一、namedtuple
namedtuple()
函數(shù)是一個(gè)工廠函數(shù)肴甸,它返回一個(gè)子類寂殉,這個(gè)子類繼承自 tuple 類,并且擁有名字原在,這個(gè)名字就是你傳給 namedtuple()
的第一個(gè)參數(shù)友扰。這個(gè)子類的實(shí)例就像一個(gè)普通的元組,但是還提供了方便的屬性訪問庶柿。namedtuple
是一種定義小型和不可變的數(shù)據(jù)類的簡單方法焕檬。
from collections import namedtuple
# 創(chuàng)建一個(gè)namedtuple類型User,并包含name和age兩個(gè)屬性澳泵。
User = namedtuple('User', ['name', 'age'])
# 創(chuàng)建一個(gè)User對(duì)象
user = User(name='user1', age=23)
print(user.name) # 輸出:user1
print(user.age) # 輸出:23
二实愚、deque
deque
(雙向隊(duì)列)是一種來自 collections
模塊的容器,它提供了從左端和右端高效、快速地添加和刪除元素的功能腊敲。
from collections import deque
# 創(chuàng)建一個(gè)deque
d = deque(['a', 'b', 'c'])
# 從右端添加元素
d.append('d') # d現(xiàn)在是deque(['a', 'b', 'c', 'd'])
# 從左端添加元素
d.appendleft('e') # d現(xiàn)在是deque(['e', 'a', 'b', 'c', 'd'])
# 從右端刪除元素
d.pop() # 返回 'd', d現(xiàn)在是deque(['e', 'a', 'b', 'c'])
# 從左端刪除元素
d.popleft() # 返回 'e', d現(xiàn)在是deque(['a', 'b', 'c'])
三击喂、Counter
collections
模塊的Counter
類是一個(gè)簡單的計(jì)數(shù)器,例如碰辅,它可以用來統(tǒng)計(jì)字符的個(gè)數(shù):
from collections import Counter
c = Counter('hello world') # 從一個(gè)可迭代對(duì)象創(chuàng)建
print(c) # 輸出 Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
Counter
對(duì)象有一個(gè)有用的方法most_common(n)
懂昂,該方法返回計(jì)數(shù)最多的n個(gè)元素的列表,每個(gè)元素是一個(gè)元組没宾,元組的第一個(gè)元素是元素本身凌彬,第二個(gè)元素是元素的計(jì)數(shù)。
四循衰、defaultdict
defaultdict
是dict的一個(gè)子類铲敛,它接受一個(gè)工廠函數(shù)作為默認(rèn)值,當(dāng)查找的鍵不存在時(shí)会钝,可以實(shí)例化一個(gè)值作為默認(rèn)值伐蒋。
from collections import defaultdict
# 使用列表(list)作為default_factory,當(dāng)鍵不存在時(shí)迁酸,返回一個(gè)空列表先鱼。
dd = defaultdict(list)
# 添加一個(gè)鍵值對(duì)
dd['dogs'].append('Rufus')
dd['dogs'].append('Kathrin')
dd['dogs'].append('Mr Sniffles')
print(dd['dogs']) # 輸出: ['Rufus', 'Kathrin', 'Mr Sniffles']
五、OrderedDict
OrderedDict
是dict的一個(gè)子類奸鬓,它記住了元素插入的順序焙畔。在Python 3.7之前,普通的dict并不保證鍵值對(duì)的順序串远,而OrderedDict
則按照插入的順序排列元素宏多。從Python 3.7開始,dict也會(huì)保持插入順序抑淫,但是OrderedDict
仍然有它的特性,如重新排列字典的順序等姥闪。
from collections import OrderedDict
d = OrderedDict()
d['first'] = 1
d['second'] = 2
d['third'] = 3
d['last'] = 4
# 輸出 "first 1", "second 2", "third 3", "last 4"
for key in d:
print(key, d[key])
六始苇、結(jié)論
collections
模塊中還包含有其他有用的工具,如ChainMap
筐喳、UserDict
催式、UserList
等等,這些都是非常實(shí)用的集合類避归。使用和理解這些數(shù)據(jù)結(jié)構(gòu)可以讓我們?cè)诰幊讨懈拥眯膽?yīng)手荣月,代碼更加高效和清晰。
上述這些是 collections
模塊中最常用的一些數(shù)據(jù)結(jié)構(gòu)梳毙,理解和熟練使用這些工具哺窄,可以極大提高我們編程的效率。希望這篇文章能幫助你深入理解Python中的collections
模塊,能夠更好的使用Python進(jìn)行編程萌业。