1.collections.Counter
這個映射類型會給鍵準備一個整數計數器。每次更新一個鍵的時候都會增加這個計數器。所以這個類型可以用來給可散列表對象計數,或者是當成多重集來用——多重集合就是集合里的元素可以出現不止一次。Counter 實現了 + 和 - 運算符用來合并記錄,還有像 most_common([n]) 這類很有用的方法。most_common([n]) 會按照次序返回映射里最常見的 n 個鍵和它們的計數。
import collections
ct = collections.Counter(['zhao','zhao','linpeng','peng','peng','peng'])
print ct #output:Counter({'peng': 3, 'zhao': 2, 'linpeng': 1})
print ct.most_common(2) # output: [('peng', 3), ('zhao', 2)]
2.collections.OrderedDict
這個類型在添加鍵的時候會保持順序,因此鍵的迭代次序總是一致的。OrderedDict 的 popitem 方法默認刪除并返回的是字典里的最后一個元素,但是如果像 my_odict.popitem(last=False) 這樣調用它,那么它刪除并返回第一個被添加進去的元素。
3.collections.ChainMap
該類型可以容納數個不同的映射對象,然后在進行鍵查找操作的時候,這些對象會被當作一個整體被逐個查找,直到鍵被找到為止。這個功能在給有嵌套作用域的語言做解釋器的時候很有用,可以用一個映射對象來代表一個作用域的上下文。
4.colllections.UserDict
這個類其實就是把標準 dict 用純 Python 又實現了一遍。跟 OrderedDict、ChainMap 和 Counter 這些開箱即用的類型不同,UserDict 是讓用戶繼承寫子類的。更傾向于從 UserDict 而不是從 dict 繼承的主要原因是,后者有時會在某些方法的實現上走一些捷徑,導致我們不得不在它的子類中重寫這些方法,但是 UserDict 就不會帶來這些問題.
??UserDict 并不是 dict 的子類,但是 UserDict 有一個叫作 data 的屬性,是 dict 的實例,這個屬性實際上是 UserDict 最終存儲數據的地方。
5.最后介紹一種不可變映射對象,type 模塊中的MappingProxyType
??types 模塊中引入了一個封裝類名叫 MappingProxyType。如果給這個類一個映射,它會返回一個只讀的映射視圖。雖然是個只讀視圖,但是它是動態的。這意味著如果對原映射做出了改動,我們通過這個視圖可以觀察到,但是無法通過這個視圖對原映射做出修改。