99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

Python標(biāo)準(zhǔn)庫學(xué)習(xí)之collections模塊詳解

發(fā)布時間:2017-04-24 21:08  回復(fù):0  查看:2936   最后回復(fù):2017-04-24 21:08  
本文后大家啊分享的主要是python 標(biāo)準(zhǔn)庫的collections 模塊,一起來看看吧,希望對大家 學(xué)習(xí)python有所幫助。.
  這個模塊提供幾個非常有用的Python 容器類型
   1.容器
Python標(biāo)準(zhǔn)庫學(xué)習(xí)之collections模塊詳解
   2.OrderedDict
   OrderedDict  類似于正常的詞典,只是它記住了元素插入的順序,當(dāng)?shù)鼤r,返回它會根據(jù)插入的順序返回。
  ·  和正常字典相比 , 它是 有序 ( 插入的順序 ) 。
   from collections import OrderedDict
  dict1 = dict()  #  普通字典
  dict1['apple'] = 2
  dict1['banana'] = 1
  dict1['orange'] = 3
  dict2 = OrderedDict()  #  有序字典
  dict2['apple'] = 2
  dict2['banana'] = 1
  dict2['orange'] = 3
   for key,  value  in dict1.items():
  print 'key:', key, ' value:',  value
   for key,  value  in dict2.items():
  print 'key:', key, ' value:',  value
  # ---- 輸出結(jié)果 -----
  普通字典 key: orange  value: 3key: apple  value: 2key: banana  value: 1
  有序字典 key: apple  value: 2key: banana  value: 1key: orange  value: 3
  ·  如果重寫已經(jīng)存在的 key ,原始順序保持不變,如果刪除一個元素再重新插入,那么它會在末尾。
   from collections  import OrderedDict
  dict2 = OrderedDict()
  dict2['apple'] = 2
  dict2['banana'] = 1
  dict2['orange'] = 3
  直接重寫 apple 的值 , 順序不變
  dict2['apple'] = 0
  刪除在重新寫入 banana,  順序改變
  dict2.pop('banana')
  dict2['banana'] = 1
   print dict2
  # ---- 輸出結(jié)果 -----
  OrderedDict([('apple', 0), ('orange', 3), ('banana', 1)])
  ·  可以使用排序函數(shù),將普通字典變成 OrderedDict 。
  from collections  import OrderedDict
  d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
  order_d = OrderedDict(sorted(d.items(), key=lambda t: t[1]))
   for key,  value  in order_d.items():
  print 'key:', key, ' value:',  value
  # ---- 輸出結(jié)果 -----key: pear  value: 1key: orange  value: 2key: banana  value: 3key: apple  value: 4
   3.namedtuple
  namedtuple 就是命名的 tuple ,一般情況下的 tuple 是這樣的 (item1, item2, item3,…) ,所有的 item 都只能通過 index 訪問,沒有明確的稱呼,而 namedtuple 就是事先把這些 item 命名,以后可以方便訪問。
   from collections  import namedtuple
  定義一個 namedtuple 類型 User ,并包含 name , sex age 屬性。
  User = namedtuple('User', ['name', 'sex', 'age'])
  創(chuàng)建一個 User 對象
  user1 = User(name='name1', sex='male', age=18)
  也可以通過一個 list 來創(chuàng)建一個 User 對象,這里注意需要使用 "_make" 方法
  user2 = User._make(['name2', 'male', 21])
   print 'user1:', user1
  使用點號獲取屬性 print 'name:', user1.name, ' sex:', user1.sex, ' age:', user1.age
   User 對象轉(zhuǎn)換成字典,注意要使用 "_asdict" print 'user1._asdict():', user1._asdict()
  字典轉(zhuǎn)換成 namedtuple
  name_dict = {'name': 'name3', 'sex': 'male', 'age': 20} print 'dict2namedtuple:', User(**name_dict)
  修改對象屬性,注意要使用 "_replace" 方法 print 'replace:', user1._replace(age=22)
  ---- 輸出結(jié)果 -----user1User(name='name1', sex='male', age=18) namename1   sexmale   age18user1._asdict(): OrderedDict([('name', 'name1'), ('sex', 'male'), ('age', 18)]) dict2namedtupleUser(name='name3', sex='male', age=20) replace: User(name='name1', sex='male', age=22)
   4.Counter
  Counter 類的目的是用來跟蹤值出現(xiàn)的次數(shù)。它是一個無序的容器類型,以字典的鍵值對形式存儲,其中元素作為 key ,其計數(shù)作為 value
  · Counter 創(chuàng)建有如下幾種方法
   from collections  import Counter
   print Counter('aabbcccd')  #  從一個可 iterable 對象( list 、 tuple dict 、字符串等)創(chuàng)建 print Counter(['a', 'a', 'c'])  #  從一個可 iterable 對象( list tuple 、 dict 、字符串等)創(chuàng)建 print Counter({'a': 4, 'b': 2})  #  從一個字典對象創(chuàng)建 print Counter(a=4, b=2)  #  從一組鍵值對創(chuàng)建
  # ---- 輸出結(jié)果 -----
  Counter({'c': 3, 'a': 2, 'b': 2, 'd': 1})
  Counter({'a': 2, 'c': 1})
  Counter({'a': 4, 'b': 2})
  Counter({'a': 4, 'b': 2})
  ·  獲取元素的計數(shù)時和 dict 類似 但是這里的 key 不存在時返回 0 ,而不是 KeyError
  >>> c = Counter("acda")>>> c["a"]2>>> c["h"]0
  ·  可以使用 update subtract 對計數(shù)器進行更新 ( 增加和減少 )
  from collections  import Counter
  c = Counter('aaabbc')
  print 'c:', c
  c.update("abc")print 'c.update("abc"):', c  #  用另一個 iterable 對象 update  也可傳入一個 Counter 對象
  c.subtract("abc")print 'c.subtract("abc"):', c  #  用另一個 iterable 對象 subtract  也可傳入一個 Counter 對象
  # ---- 輸出結(jié)果 -----
  c: Counter({'a': 3, 'b': 2, 'c': 1})
  c. update("abc"): Counter({'a': 4, 'b': 3, 'c': 2})
  c.subtract("abc"): Counter({'a': 3, 'b': 2, 'c': 1})
  ·  返回計數(shù)次數(shù) top n 的元素
  from collections  import Counter
  c = Counter('aaaabbcccddeeffg')
  print c.most_common(3)
  # ---- 輸出結(jié)果 -----
  [('a', 4), ('c', 3), ('b', 2)]
  · Counter 還支持幾個為數(shù)不多的數(shù)學(xué)運算 + 、 - 、 & 、 |
   from collections  import Counter
  a = Counter(a=3, b=1)
  b = Counter(a=1, b=1)
   print 'a+b:', a + b  #  加法 , 計數(shù)相加 print 'a-b:', a - b  #  減法 , 計數(shù)相減 print 'b-a:', b - a  #  只保留正計數(shù) print 'a&b:', a & b  # 交集 print 'a|b:', a | b  #  并集
  # ---- 輸出結(jié)果 ----- a+b: Counter({'a': 4, 'b': 2}) a-b: Counter({'a': 2}) b-a: Counter() a&b: Counter({'a': 1, 'b': 1}) a|b: Counter({'a': 3, 'b': 1})
   5.deque
  deque 就是雙端隊列,是一種具有隊列和棧的性質(zhì)的數(shù)據(jù)結(jié)構(gòu),適合于在兩端添加和刪除,類似與序列的容器
  ·  常用方法
   from collections  import deque
  d = deque([])  #  創(chuàng)建一個空的雙隊列
  d.append(item)  #  d 的右邊 ( 末尾 ) 添加項目 item
  d.appendleft(item)  #  d 的左邊 ( 開始 ) 添加項目 item
  d.clear()  #  清空隊列 , 也就是刪除 d 中的所有項目
  d.extend(iterable)  #  d 的右邊 ( 末尾 ) 添加 iterable 中的所有項目
  d.extendleft(item)  #  d 的左邊 ( 開始 ) 添加 item 中的所有項目
  d.pop()  #  刪除并返回 d 中的最后一個 ( 最右邊的 ) 項目。如果 d 為空,則引發(fā) IndexError
  d.popleft()  #  刪除并返回 d 中的第一個 ( 最左邊的 ) 項目。如果 d 為空,則引發(fā) IndexError
  d.rotate(n=1)#  d 向右旋轉(zhuǎn) n ( 如果 n<0, 則向左旋轉(zhuǎn) )
  d.count(n)  #  在隊列中統(tǒng)計元素的個數(shù), n 表示統(tǒng)計的元素
  d.remove(n)  #  從隊列中刪除指定的值
  d.reverse()  #  翻轉(zhuǎn)隊列
   6.defaultdict
  使用dict 時,如果引用的 Key 不存在,就會拋出  KeyError  。如果希望key 不存在時,返回一個默認值,就可以用 defaultdict
  ·  比如要統(tǒng)計字符串中每個單詞的出現(xiàn)頻率
   from collections  import defaultdict
  s = 'ilikepython'
  使用普通字典
  frequencies = {} for  each in s:
  frequencies[ each] += 1
  使用普通字典
  frequencie = defaultdict( int) for  each in s:
  frequencie[ each] += 1
  第一段代碼中會拋出一個  KeyError  的異常, 而使用 defaultdict 則不會。 defaultdict 也可以接受一個函數(shù)作為參數(shù)來初始化 :
  >>> from collections import defaultdict>>> d = defaultdict(lambda : 0)>>> d['0']0


來源: 博客園
您還未登錄,請先登錄

熱門帖子

最新帖子

?