collections --- 集合與容器型別¶
此模組提供特殊的容器資料型別,用以補充內建的 list、tuple、dict 與 set:雙端佇列(deque)、具名欄位的 tuple 工廠(namedtuple()),以及保留順序的 dict(OrderedDict)。
類別¶
- class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)¶
Deque(雙端佇列)是一種類似 list 的容器,支援在 deque 任一端進行 O(1) 的附加與彈出操作。新的 deque 使用下列引數建立:
iterable 是用於在建立時填入 deque 的可迭代物件。它可以是空的 tuple 或 list,以建立一個初始為空的 deque。
必須指定 maxlen,deque 將受限於此最大長度。一旦 deque 已滿,任何新加入的項目都會從相反端丟棄項目。
選用的 flags 可設為 1,以在加入項目時檢查溢位。
Deque 物件支援
bool、len()、迭代以及下標的讀取與儲存。它們也具有下列方法:- append(x: Any) None¶
將 x 加入 deque 的右側。若啟用了溢位檢查且佇列已無空間,則引發
IndexError。
- appendleft(x: Any) None¶
將 x 加入 deque 的左側。若啟用了溢位檢查且佇列已無空間,則引發
IndexError。
- pop() Any¶
從 deque 的右側移除並傳回一個項目。若沒有任何項目,則引發
IndexError。
- popleft() Any¶
從 deque 的左側移除並傳回一個項目。若沒有任何項目,則引發
IndexError。
- extend(iterable: Iterable) None¶
透過將 iterable 中的所有項目附加到 deque 的右側來擴充 deque。若啟用了溢位檢查且 deque 已無空間,則引發
IndexError。
- collections.namedtuple(name: str, fields: str | Sequence[str]) type¶
這是一個工廠函式,用以建立具有特定名稱與一組欄位的新 namedtuple 型別。namedtuple 是 tuple 的子類別,允許不僅透過數值索引存取其欄位,也可使用符號欄位名稱以屬性存取語法來存取。Fields 是一個指定欄位名稱的字串序列。為了與 CPython 相容,它也可以是以空格分隔欄位名稱的字串(但這較沒有效率)。使用範例::
from collections import namedtuple MyTuple = namedtuple("MyTuple", ("id", "name")) t1 = MyTuple(1, "foo") t2 = MyTuple(2, "bar") print(t1.name) assert t2.name == t2[1]
實例也提供下列方法:
- collections._asdict() OrderedDict
以
OrderedDict形式傳回欄位名稱及其值。
- class collections.OrderedDict(*args: Any, **kwargs: Any)¶
dict型別的子類別,會記住並保留所加入鍵的順序。接受與dict相同的建構式形式(一個由(key, value)配對組成的可迭代物件、另一個對映,或關鍵字引數)。當迭代有序 dict 時,鍵/項目會依照其加入的順序傳回::from collections import OrderedDict # To make benefit of ordered keys, OrderedDict should be initialized # from sequence of (key, value) pairs. d = OrderedDict([("z", 1), ("a", 2)]) # More items can be added as usual d["w"] = 5 d["b"] = 3 for k, v in d.items(): print(k, v)
輸出::
z 1 a 2 w 5 b 3
- popitem() Tuple¶
從字典中移除並傳回一個 (key, value) 配對。配對以 LIFO 順序傳回。
與 CPython 的差異
OrderedDict.popitem()不支援last=False引數,且若有項目存在,將始終移除並傳回最後一個項目。對此的因應方式是使用
pop(<first_key>)來移除第一個項目::first_key = next(iter(d)) d.pop(first_key)