国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python標準庫之collections包的使用教程

2020-02-23 04:36:52
字體:
來源:轉載
供稿:網友

前言

Python為我們提供了4種基本的數據結構:list, tuple, dict, set,但是在處理數據量較大的情形的時候,這4種數據結構就明顯過于單一了,比如list作為數組在某些情形插入的效率會比較低,有時候我們也需要維護一個有序的dict。所以這個時候我們就要用到Python標準庫為我們提供的collections包了,它提供了多個有用的集合類,熟練掌握這些集合類,不僅可以讓我們讓寫出的代碼更加Pythonic,也可以提高我們程序的運行效率。

defaultdict

defaultdict(default_factory)在普通的dict之上添加了default_factory,使得key不存在時會自動生成相應類型的value,default_factory參數可以指定成list, set, int等各種合法類型。

我們現在有下面這樣一組list,雖然我們有5組數據,但是仔細觀察后發現其實我們只有3種color,但是每一種color對應多個值。現在我們想要將這個list轉換成一個dict,這個dict的key對應一種color,dict的value設置為一個list存放color對應的多個值。我們可以使用defaultdict(list)來解決這個問題。

>>> from collections import defaultdict>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]>>> d = defaultdict(list)>>> for k, v in s:...  d[k].append(v)...>>> sorted(d.items())[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

以上等價于:

>>> d = {}>>> for k, v in s:...  d.setdefault(k, []).append(v)...>>> sorted(d.items())[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

如果我們不希望含有重復的元素,可以考慮使用defaultdict(set) 。set相比list的不同之處在于set中不允許存在相同的元素。

>>> from collections import defaultdict>>> s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]>>> d = defaultdict(set)>>> for k, v in s:...  d[k].add(v)...>>> sorted(d.items())[('blue', {2, 4}), ('red', {1, 3})]

OrderedDict

Python3.6之前的dict是無序的,但是在某些情形我們需要保持dict的有序性,這個時候可以使用OrderedDict,它是dict的一個subclass,但是在dict的基礎上保持了dict的有序型,下面我們來看一下使用方法。

>>> # regular unsorted dictionary>>> d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}>>> # dictionary sorted by key>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])>>> # dictionary sorted by value>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])>>> # dictionary sorted by length of the key string>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 固原市| 寿宁县| 涟源市| 唐海县| 崇信县| 稻城县| 遂平县| 万源市| 嵊泗县| 额尔古纳市| 哈尔滨市| 陇南市| 德化县| 临桂县| 获嘉县| 米易县| 来宾市| 兴城市| 乌鲁木齐市| 宾阳县| 洪泽县| 新巴尔虎左旗| 乌拉特后旗| 临漳县| 延寿县| 汝州市| 珠海市| 疏附县| 桃江县| 巴楚县| 千阳县| 鄂尔多斯市| 临洮县| 都江堰市| 武安市| 合川市| 河北省| 会同县| 万州区| 琼结县| 伽师县|