《Python》常用模組之collections模組

來源:互聯網
上載者:User

標籤:import   技術   使用   pbm   自訂   分享   hid   元組   計數器   

內建的資料類型:

  int  float  complex

  str  list  tuple

  dict  set

基礎資料類型:

  int  float  complex  

  str  list  tuple

  dict

collections模組:

  根據基礎資料類型又做了一些擴充

    1、OrderdDict:有序字典  Python3.6以後自動有序   

    2、defaultdict:預設字典

    3、Counter: 計數器

    4、namedtuple:可命名元祖

    5、deque:雙端隊列

1、OrderdDict:(有序字典)

    在Python3.6之前使用dict,key是無序的。在對dict做迭代時,我們無法確定key的順序。

    如果要保持key的順序,key用OrderdDict:

from collections import OrderedDictd = dict([(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)])print(d)    # {‘a‘: 1, ‘c‘: 3, ‘b‘: 2}  dict的key是無序的od = OrderedDict([(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)])print(od)   # OrderedDict([(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)])   OrderedDict的Key是有序的

 

from collections import OrderedDictdd = OrderedDict([(‘a‘, 1), (‘k1‘, ‘v1‘)])print(dd)   # OrderedDict([(‘a‘, 1), (‘k1‘, ‘v1‘)])for k in dd:    print(k, dd[k])  # a 1      k1 v1dd[‘k2‘] = ‘v2‘print(dd)   # OrderedDict([(‘a‘, 1), (‘k1‘, ‘v1‘), (‘k2‘, ‘v2‘)])

 

2、defaultdict:(預設字典)

  有一個列表 [11,22,33,44,55,66,77,88,99,90],將所有大於 66 的值儲存至字典的第一個key中,將小於 66 的值儲存至第二個key的值中。

即:{‘k1’:大於66,‘k2’:小於66}

lst = [11, 22, 33, 44, 55, 66, 77, 88, 99 ,90]dic = {}for i in lst:    if i > 66:        if dic.get(‘k1‘):            dic[‘k1‘].append(i)        else:            dic[‘k1‘] = [i]    elif i < 66:        if dic.get(‘k2‘):            dic[‘k2‘].append(i)        else:            dic[‘k2‘] = [i]print(dic)  # {‘k2‘: [11, 22, 33, 44, 55], ‘k1‘: [77, 88, 99, 90]}
原生字典解決方案
from collections import defaultdictlst = [11, 22, 33, 44, 55, 66, 77, 88, 99 ,90]dic = defaultdict(list)for i in lst:    if i > 66:        dic[‘v1‘].append(i)    elif i < 66:        dic[‘v2‘].append(i)print(dic)  # defaultdict(<class ‘list‘>, {‘v2‘: [11, 22, 33, 44, 55], ‘v1‘: [77, 88, 99, 90]})print(dic[‘v1‘])    # [77, 88, 99, 90]print(dic[‘v2‘])    # [11, 22, 33, 44, 55]
defaultdict解決方案

 

  使用dict時,如果引用的key不存在,就會報錯。如果希望key不存在時,返回一個預設值,就可以使用defaultdict:

from collections import defaultdictd = defaultdict(lambda : ‘default‘)print(d)   # defaultdict(<function <lambda> at 0x01368D68>, {})print(d[‘k1‘])    # k1不存在,使用預設值:defaultprint(d[‘k2‘])    # k2不存在,使用預設值:defaultd[‘k3‘] = ‘vvvvv‘  # k3自訂值print(d)   # defaultdict(<function <lambda> at 0x00798D68>, {‘k1‘: ‘default‘, ‘k2‘: ‘default‘, ‘k3‘: ‘vvvvv‘})d = defaultdict(list)print(d[‘k1‘])  # []d[‘k2‘].append(123)print(d)    # defaultdict(<class ‘list‘>, {‘k1‘: [], ‘k2‘: [123]})

 

3、Counter(計數器)

  Counter類的目的是用來跟蹤值出現的次數。它是一個無序的容器類型,以字典的索引值對形式儲存,其中元素作為key,其計數作為value。

from collections import Counter
c = Counter(‘sdghjasihgaosjdoiasfsfas‘)print(c) # Counter({‘s‘: 6, ‘a‘: 4, ‘d‘: 2, ‘g‘: 2, ‘h‘: 2, ‘j‘: 2, ‘i‘: 2, ‘o‘: 2, ‘f‘: 2})# 刪除一個值del c[‘a‘]print(c) # Counter({‘s‘: 6, ‘d‘: 2, ‘g‘: 2, ‘h‘: 2, ‘j‘: 2, ‘i‘: 2, ‘o‘: 2, ‘f‘: 2})

 

4、namedtuple:(可命名元祖)

   時間模組中的結構化時間用的就是可命名元祖 

from collections import namedtuplebirth = namedtuple(‘Struct_time‘, [‘year‘, ‘month‘, ‘day‘])b1 = birth(2018, 9, 5)print(type(b1)) # <class ‘__main__.Struct_time‘>print(b1.year)  # 2018print(b1.month) # 9print(b1.day)   # 5print(b1)   # Struct_time(year=2018, month=9, day=5)‘‘‘可命名元組非常類似一個只有屬性沒有方法的類[‘year‘,‘month‘,‘day‘]是對象屬性名稱Struct_time是類 的名字這個類最大的特點就是一旦執行個體化 不能修改屬性的值‘‘‘

 

 

5、deque:雙端隊列   

   使用list儲存資料時,按索引訪問元素很快,但是插入和刪除元素就很慢了,因為list是線性儲存,資料量大的時候,插入和刪除效率很低。

deque是為了高效實現插入和刪除操作的雙向列表,適合用於隊列和棧:

from collections import dequedq = deque()dq.append(1)dq.append(2)dq.append(3)dq.appendleft(4)print(dq)   # deque([4, 1, 2, 3])print(dq.pop()) # 3print(dq)   # deque([4, 1, 2])print(dq.popleft()) # 4print(dq)   # deque([1, 2])
import queueq = queue.Queue()    #隊列q.put(1)q.put(2)q.put(‘aaa‘)q.put([1, 2, 3])q.put({‘k1‘:1, ‘k2‘:2})print(q)    # <queue.Queue object at 0x004BE490>print(q.get())  # 1print(q.get())  # 2print(q.get())  # aaa# 一個個添加,一個個取值,先進先出

 

 

 

 

 

 

 

《Python》常用模組之collections模組

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.