Python內建庫collections使用集錦

2021-10-01 22:28:51 字數 4093 閱讀 3311

collections中有以下類

class name

description

namedtuple

用於建立具有命名字段的元組子類的工廠函式

deque

類似列表的容器,兩端都有快速追加和彈出

chainmap

類似於dict的類,用於建立多個對映的單個檢視

counter

用於計算可雜湊物件的dict子類

ordereddict

記住元素新增順序的dict子類

defaultdict

dict子類呼叫工廠函式來提供缺失值

userdict

包裝字典物件以便於dict子類化

userlist

包裝列表物件以便於列表子類化

userstring

包裝字串物件以便於字串子類化

主要介紹除userdict、userlist、和userstring的其他類使用方法。

示例

# example: namedtuple

computer = collections.namedtuple(

'computer',[

'name'

,'price'])

dell = computer(

'dell',1

)hp = computer(

'hp',2

)print

(dell)

print

(hp.price)

輸出

computer(name=

'dell', price=1)

2

namedtuple「宣告」了有兩個成員變數的類,其中乙個成員為name,另外乙個為price。並可以使用建構函式輕鬆建立computer物件。

示例

# example: deque

deque = collections.deque()1

)2)print

(deque)3)

print

(deque)

deque.reverse(

)print

(deque)

print

('pop back'

, deque.pop())

print

('pop left'

, deque.popleft())

print

('deque left'

, deque)

輸出

deque([1

,2])

deque([3

,1,2

])deque([2

,1,3

])pop back 3

pop left 2

deque left deque([1

])

deque提供了方便的可以進行雙端插入和中間插入的雙端佇列。

示例

# example: chainmap

dicta =

dictb =

chainmap = collections.chainmap(dicta, dictb)

print

(chainmap)

print

(chainmap[

'a']

, chainmap[

'b']

, chainmap[

'c']

, chainmap[

'd']

)del chainmap[

'b']

print

(chainmap[

'a']

, chainmap[

'b']

, chainmap[

'c']

, chainmap[

'd']

)print

(dicta)

輸出

chainmap(,)

1234

110034

chainmap提供了將多個字典聯合的方法,但其並不是生成乙個物件,更像是乙個對已經存在字典物件的引用(從刪除部分可以看出來)。新增和刪除只針對第乙個字典進行操作,查詢則是順序查詢,返回查詢到的第乙個結果。

由於不是建立新的物件,所以構造速度快,在僅需要使用合併後字典查詢時非常有用。

示例

lista =[1

,2,3

,4,5

,1,1

,2,2

,3]counter = collections.counter(lista)

print

(counter)

輸出

counter(

)

counter提供了對乙個可迭代物件計數的功能,構造乙個字典返回其所有出現的內容和次數。

示例

# example: orderdict

ori_dict =

print

(ori_dict)

od = collections.ordereddict(ori_dict)

print

(od)

od['d']=

100print

(od)

輸出

ordereddict([(

'd',4)

,('a',1)

,('z',26)

,('b',2)

])ordereddict([(

'd',

100),(

'a',1)

,('z',26)

,('b',2)

])

ordereddict在遍歷的時候保證了插入時候的順序,而普通的dict不保證如此。上例恰好普通的dict和ordereddict輸出一致。

示例

# example: defaultdict

s =[

('red',1

),('blue',2

),('red',3

),('blue',4

),('red',1

),('blue',4

)]d = collections.defaultdict(

set)

for k, v in s:

d[k]

.add(v)

print

(d.items())

print

(d['green'

])

輸出

dict_items([(

'red',)

,('blue',)

])set(

)

在使用預設的dict時候,如果查詢乙個不存在的key,會出現keyerror,使用defaultdict會避免這種情況。但是需要在建立defaultdict的時候指定空鍵的返回型別,如set或者list。set使得鍵對應的值出現不會重複出現,list不保證這一點,見下例。

示例

# example: defaultdict

s =[

('red',1

),('blue',2

),('red',3

),('blue',4

),('red',1

),('blue',4

)]d = collections.defaultdict(

list

)# 更改初始化為list

for k, v in s:

d[k]

print

(d.items())

print

(d['green'

])

輸出

dict_items([(

'red',[

1,3,

1]),

('blue',[

2,4,

4])]

)[]

了解一下python內建模組collections

在使用python的過程中,一定是離不開資料結構的,也就是list 列表,tuples 元組,dictionaries 字典。那實際應用中我們更多的還是要去操作這些結構裡的資料。比如,在列表後面新增元素,那麼就會用到append 方法。那除了這些本身的操作方法之外,還有乙個python內建模組 co...

python使用asyncio內建庫進行非同步I O

參考文章 asyncio庫是python3.4後引入的標準庫,其中直接內建了對非同步io的支援,asyncio的程式設計模型就是乙個訊息迴圈,我們直接從asyncio中獲取乙個eventloop,然後把需要執行的協程扔到eventloop這個訊息迴圈中,就實現了非同步操作,下面是使用asyncio非...

python內建型別 python列表內建型別方法

列表操作方法 對列表l操作 例如list range 1,5 即 list 1,2,3,4 不含最後乙個元素 list range 1,10,2 即 list 1,3,5,7,9 在列表末尾新增新的物件 2 list.count obj 統計某個元素在列表 現的次數 3 list.extend se...