Python附帶?個模塊, 它包含許多容器數(shù)據(jù)類型, 名字叫作collections。
1、defaultdict
與dict類型不同, 你不需要檢查key是否存在, 所以我們能這樣做:
from collections import defaultdict
colours = (
????('Yasoob', 'Yellow'),
????('Ali', 'Blue'),
????('Arham', 'Green'),
????('Ali', 'Black'),
????('Yasoob', 'Red'),
????('Ahmed', 'Silver'),
)?
favourite_colours = defaultdict(list)
for name, colour in colours:
????favourite_colours[name].append(colour)
print(favourite_colours)
另?種重要的是例?就是: 當你在?個字典中對?個鍵進?嵌套賦值時, 如果這個鍵不存在, 會觸發(fā)keyError異常。 defaultdict允許我們??個聰明的?式繞過這個問題。
問題:
some_dict = {}
some_dict['colours']['favourite'] = "yellow"
## 異常輸出: KeyError: 'colours'
解決?案:
from collections import defaultdict
tree = lambda: defaultdict(tree)
some_dict = tree()
some_dict['colours']['favourite'] = "yellow"
2、Counter
Counter是?個計數(shù)器, 它可以幫助我們針對某項數(shù)據(jù)進?計數(shù)。 ?如它可以?來計算每個?喜歡多少種顏?:
from collections import Counter
colours = (
????('Yasoob', 'Yellow'),
????('Ali', 'Blue'),
????('Arham', 'Green'),
????('Ali', 'Black'),
????('Yasoob', 'Red'),
????('Ahmed', 'Silver'),
)?
favs = Counter(name for name, colour in colours)
print(favs)
3、deque
deque提供了?個雙端隊列, 你可以從頭/尾兩端添加或刪除元素。
它的?法就像python的list, 并且提供了類似的?法, 例如:
from collections import deque
d = deque(range(5))
print(len(d),d[0],d[-1])
d.append(6)? #插入
d.pop()? #刪除
d.popleft()? #從左側(cè)刪除
d.extend([6,7,8])? #拓展隊列
d.extendleft([0])? #從左側(cè)拓展
我們也可以限制這個列表的??, 當超出你設定的限制時, 數(shù)據(jù)會從對隊列另?端被擠出去(pop)。
最好的解釋是給出?個例?:
d = deque(maxlen=30)
現(xiàn)在當你插?30條數(shù)據(jù)時,再次插入,最左邊?端的數(shù)據(jù)將從隊列中刪除。