Python基礎系列講解——內建庫之collections的使用
Python中有很多好用的內建的模組,比如datatime、json等等,本文介紹下collections模組的使用。使用collections模組時,首先要匯入模組,如下所示:
import collections
我們首先介紹下OrderedDict模組的使用。在Python3.5(含)中字典是無序的,即不會按照使用者插入的順序排序,如下所示,列印結果我們發現輸出並沒有按輸入的順序輸出。
x = dict() # 無序字典 x['stock1'] = "600213" x['stock2'] = "600223" x['stock3'] = "600233" print(x) # {'stock1': '600213', 'stock3': '600233', 'stock2': '600223'}
使用operator.itemgetter對字典排序後,返回的是一個list變數,而不是字典,倘若再將這個list轉換為字典後,會發現又變回了無序字典。如下所示:
x = {"stock1": "600213", "stock2": "600223", "stock3": "600233"} sorted_x = sorted(x.items(), key=operator.itemgetter(0)) print(type(x)) # <class 'dict'> print(type(sorted_x)) # <class 'list'> print(dict(sorted_x)) # {'stock1': '600213', 'stock3': '600233', 'stock2': '600223'}
如果要使字典保持我們插入的順序怎麼辦呢?可以用collections.OrderedDict來初始化字典,使無序字典成為有序字典,如下所示:
x = OrderedDict() x['stock1'] = "600213" x['stock2'] = "600223" x['stock3'] = "600233" print(x) # OrderedDict([('stock1', '600213'), ('stock2', '600223'), ('stock3', '600233')]) print(type(x)) # <class 'collections.OrderedDict'>
OrderedDict生成的字典支援如下屬性:
# values() 獲取字典所有的value,返回一個列表 print(x.values()) # odict_values(['600213', '600223', '600233']) # setdefault() 獲取指定key的value,如果key不存在,則建立 val = x.setdefault('stock4') print(val, x) # None OrderedDict([('stock1', '600213'), ('stock2', '600223'), ('stock3', '600233'), ('stock4', None)]) # popitem() 按照後進先出原則,刪除最後加入的元素,返回key-value print(x.popitem(), x) # ('stock4', None) OrderedDict([('stock1', '600213'), ('stock2', '600223'), ('stock3', '600233')]) # pop() 獲取指定key的value,並在字典中刪除 k = x.pop('stock1') print(k, x) # 600213 OrderedDict([('stock2', '600223'), ('stock3', '600233')]) # keys() 獲取字典所有的key print(x.keys()) # clear() 清空有序字典 #x.clear() # copy() 複製 new_dic = x.copy() print(new_dic) # items(返回由“鍵值對組成元素“的列表) print(x.items()) # fromkeys() 指定一個列表,把列表中的值作為字典的key, 生成一個字典 dic = OrderedDict() name = ['allen', 'belln', 'cllen'] print(dic.fromkeys(name)) # OrderedDict([('allen', None), ('belln', None), ('cllen', None)]) print(dic.fromkeys(name, 20)) # OrderedDict([('allen', 20), ('belln', 20), ('cllen', 20)])
從Python 3.6開始,Python的字典底層機制更改後已經變成為有序字典了。雖然collections.OrderedDict的使用價值降低了,不過collections中的defaultdict仍然很有用,它可以實現一鍵多值的字典,如下所示:
y = defaultdict(list) # 一鍵多值字典使用defaultdict y["stock"].append("600213") y["stock"].append("600223") y["stock"].append("600413") y["stock"].append("600513") y["stock"].append("600225") y["stock"].append("600273") print(y) # defaultdict(<class 'list'>, {'stock': ['600213', '600223', '600413', '600513', '600225', '600273']})
接下來再介紹下collections中的Counter。Counter是一個簡單的計數器,目的是用來跟蹤值出現的次數。Counter以字典的鍵值對形式儲存值出現的次數,如下所示:
c_dict = Counter('yyydadyyyaadadsaaaxxxx') print(c_dict) # Counter({'a': 7, 'y': 6, 'd': 4, 'x': 4, 's': 1})
當然也可以使用for迴圈實現跟蹤值出現的次數,如下所示,不過使用Counter更加高效。
data = 'yyydadyyyaadadsaaaxxxx' val_cnt = {} for i in data: i_cnt = val_cnt.get(i,0) # 查詢鍵的值 val_cnt[i] = i_cnt + 1 print(val_cnt) # {'y': 6, 'd': 4, 'a': 7, 's': 1, 'x': 4} print(val_cnt.get('a')) # 7
最後我們再介紹一下ChainMap,它可以加速字典的合併。通常我們合併字典的方式如下所示:
dicta = {i: i + 1 for i in range(1, 100, 2)} dictb = {i: i + 2 for i in range(1, 100, 2)} dictc = {i: i + 3 for i in range(1, 100, 2)} dictd = {i: i + 4 for i in range(1, 100, 2)} dic_total = dicta.copy() dic_total.update(dictb) dic_total.update(dictc) dic_total.update(dictd) print(dic_total) print(dic_total.get(3, 0))
使用更高效的ChainMap方法,如下所示:
dic_total = ChainMap(dicta, dictb, dictc, dictd)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69923331/viewspace-2658546/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python基礎-內建函式詳解Python函式
- Python基礎系列講解——物件導向體系的概念剖析Python物件
- Python基礎之錯誤和異常講解Python
- Python基礎之IO流和序列化講解Python
- ansible register基礎使用講解
- 資料庫基礎知識講解資料庫
- Python基礎學:內建型別(2)Python型別
- Python基礎之:Python中的內部物件Python物件
- PHP基礎之過濾器講解PHP過濾器
- PHP基礎之物件導向講解PHP物件
- Gradle系列之構建指令碼基礎Gradle指令碼
- Python線性優化基礎講解~Python優化
- python基礎 python內建函式map/reduce/filterPython函式Filter
- Python 內建logging 使用詳細講Python
- HTML基礎講解HTML
- javaScript基礎講解JavaScript
- 字首和的基礎講解
- JavaSE基礎:Collections工具類Java
- Python爬蟲基礎講解(七):xpath的語法Python爬蟲
- 閃回資料庫(基礎例項講解)資料庫
- 影片解碼基礎講解
- Redis 基礎特性講解Redis
- 安卓動畫基礎講解安卓動畫
- 淺醉和的基礎講解
- netty系列之:內建的Frame detectionNetty
- python模組之collections模組Python
- 音訊解碼基礎講解音訊
- python基礎內容Python
- Python3.5.2 document學習系列之03、The Python Standard Library(python 標準庫)——內建函式Python函式
- RESTful 架構 基礎講解REST架構
- 數學基礎講解-02
- 數學基礎講解-04
- 數學基礎講解-05
- 數學基礎講解-6
- PHP 基礎 - 內建伺服器PHP伺服器
- Python影像處理初探:Pillow庫的基礎使用Python
- Python中內建資料庫!SQLite使用指南! ⛵Python資料庫SQLite
- Python基礎之七:編碼詳解Python