必須知道的collections模塊

先來看一下collections模塊中的方法:python

__all__ = ['deque', 'defaultdict', 'namedtuple', 'UserDict', 'UserList',
            'UserString', 'Counter', 'OrderedDict', 'ChainMap']

本章咱們只介紹除UserDict/UserList/UserString之外的方法,至於這三個方法,咱們用於繼承他們,而實現你想要的結構。
namedtuple:用於建立具備命名字段的tuple子類的工廠函數數組

#好比咱們想構造一個紙牌類
Card=namedtuple('Card',[rank,suit])    #等同於namedtuple('Card',(rank,suit))
c1=Card('A','紅桃')
c2=Card('K','黑桃')
print(c1.rank)    #A
print(c1.suit)    #紅桃
print(c1.rank)    #B
print(c1.suit)    #黑桃
#改變對象的屬性,能夠使用 對象._replace(屬性=值)方法更改已建立的對象的值
#_replace能夠傳入一個dict

deque:list-like容器,兩端都有快速追加和彈出類,用於建立多個映射的單個視圖(線程安全)安全

#其內部是一個單字母數組
a=deque("str")
a.appendleft("a")    #在頭部插入數據
a.append("b")    #在尾部插入數據
a.count("a")    #查看字符出現的次數
a.insert(2,"y")    #根據索引插入值
a.clear()    #清空雙端隊列

defaultdict:多值字典app

dict1=defaultdict(list/dict/set/lambda :"None")
dict1['a'].add(1)    #以set爲例
print(dict1)    #defaultdict(<class 'set'>, {'a': {1}})
print(dict1['b'])    #None,這就是lambda的做用

OrderedDict:保持元素被插入的順序,結構是一個雙向鏈表函數

#python3下dict默認也是有序的,可是方法有限
od=OrderedDict([("name","jim"),("age",19),("sex","男")])
od.setdefault("high",178)    #添加一組數據,或者使用od["high"]=178
od.move_to_end('name')    #將name組放置末尾

for i in od.items():
    print(i)    
#('name', 'jim')
#('age', 19)
#('sex', '男')
#('high', 178)

Counter:計數器,在底層中爲一個字典ui

c=Counter()    #能夠直接Counter("測shishiyong"),這樣就不用循環
for i in "測shishiyong":
    c[i]=c[i]+1
print(c)    
#Counter({'s': 2, 'h': 2, 'i': 2, '測': 1, 'y': 1, 'o': 1, 'n': 1, 'g': 1})
print(c.most_common(3))    #出現次數最多的三個元素
#[('s', 2), ('h', 2), ('i', 2)]
#c['元素']  查看元素的出現次數
#c.update(list/str) 能夠增長元素
#Counter能夠使用+/-進行運算

ChainMap:合併多個字典線程

dict1={'name':'jim','age':21}
dict2={'high':175,'gender':'男'}

new_dict=ChainMap(dict1,dict2)
print(new_dict)    #ChainMap({'name': 'jim', 'age': 21}, {'high': 175, 'gender': '男'})
#前dict中存在的鍵值對將會使後面dict中的鍵值對不會被從新合併,也能夠使用update()方法對
#原字典更新新字典到裏面,不過和直接合並的區別是,update會從新建立新字典,原字典更新刪除
#數據不會影響新字典
相關文章
相關標籤/搜索