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...