Preface :
在這個模組支援了 container 需求並提供不同的實作, 讓你在已經支援的 dict, list, set 與 tuple 外有其他選擇. 底下此模組提供的 container 種類 :
Counter objects :
此類別提供快速統計資料的處理, 先看範例如下 :
可以透過下面建構子建立物件 :
- class collections.Counter([iterable-or-mapping])
Count 提供 dict 的介面, 比較要注意的是如果你嘗試 access 一個不存在的鍵值, 0 會被返回而不是丟出 KeyError :
接著我們來看看物件上有什麼函數可以用 :
- elements()
- most_common([n])
- subtract([iterable-or-mapping])
- update([iterable-or-mapping])
底下是常見操作整理 :
更方便與直覺的, 某些數學運算子支援如下 :
deque objects :
首先來看它的建構子 :
- class collections.deque([iterable[, maxlen]])
Deque 物件支援下面方法 :
- append(x)
- appendleft(x)
- clear()
- count(x)
- extend(iterable)
- extendleft(iterable)
- pop()
- popleft()
- remove(value)
- reverse()
- rotate(n)
在使用 deque 必須知道在 access 兩端的 element 所需的時間為 O(1) ; 但是在 random access 中間的 element 所需時間為 O(n). 因此如果你需要常常 random 存取中間的元素建議使用 list來實作. 底下為其使用範例 :
更多的 deque 應用可以參考 deque Recipes
defaultdict objects :
此類別的建構子如下 :
- class collections.defaultdict([default_factory[, ...]])
因為此類別提供與 dict 相同的運算與函式, 接著我們直接來看範例 :
如果你將 default_factory 設為 int 方便進行 counting 的計算 :
如果將 default_factory 設為 set :
namedtuple() Factory Function for Tuples with Named Fields :
此類別提供比 tuple 更強的功能與方便的操作, 建構子如下 :
- collections.namedtuple(typename, field_names[, verbose=False][, rename=False])
接著來看範例如何使用 :
除了原本 tuple 舊有的函數與屬性, named tuple 支援以下新增的函數與屬性, 為了避免名稱上的 conflict, 名稱前會加上 underscore :
- classmethod somenamedtuple._make(iterable)
- somenamedtuple._asdict()
- somenamedtuple._replace(kwargs)
- somenamedtuple._fields
如果你要從 named tuple 的某個 field 取出值的話, 可以使用 Built-in 函數 getattr() :
如果你要從 dictionray 轉成 named tuple, 可以使用 double-star-operator :
既然 named tuple 也是類別, 所以你也可以繼承並新增客製函數 :
OrderedDict objects :
OrderedDict 類別與一般你使用到的 dict 內建類別沒有多大差異, 唯一不同是此類別會記住你 inserted key 的順序, 所以之後你取出時便可以按照插入的順序取出. 首先來看看建構子 :
- class collections.OrderedDict([items])
接著來看物件上的方法 :
- OrderedDict.popitem(last=True)
接著來看使用上的範例, 首先是透過 sorted() 與指定 key 的方式讓你決定 ordered dictionary 的順序 :
Supplement :
* Collections Abstract Base Classes
沒有留言:
張貼留言