Python: collections--容器數(shù)據(jù)類型

collections--容器數(shù)據(jù)類型

Counter

Counter作為一個(gè)容器,可以跟蹤相同的值增加了多少次。
Counter支持3種形式的初始化。調(diào)用Counter的構(gòu)造函數(shù)時(shí)可以提供一個(gè)元素序列或者一個(gè)包含鍵和計(jì)數(shù)的字典,還可以使用關(guān)鍵字參數(shù)將字符串名映射到計(jì)數(shù)。

#! /usr/bin/env python
#coding=utf-8
import collections

print collections.Counter(['a', 'b', 'c', 'a', 'b', 'b'])
print collections.Counter({'a': 2, 'b': 3, 'c': 1})
print collections.Counter(a=2, b=3, c=1)

如果不提供任何參數(shù),可以構(gòu)造一個(gè)空的Counter,然后通過(guò)update()方法填充

#! /usr/bin/env python
#coding=utf-8
import collections

c = collections.Counter()
print 'Initial:', c

c.update('abcdaab')
print 'Sequence:', c

c.update({'a': 1, 'd': 5})
print 'Dict:', c

計(jì)值將根據(jù)新數(shù)據(jù)增加, 替換數(shù)據(jù)不會(huì)改變計(jì)數(shù)

訪問(wèn)計(jì)數(shù)

#! /usr/bin/env python
#coding=utf-8
import collections

c = collections.Counter('abcdaab')

for letter in 'abcde':
    print '%s : %d' %(letter, c[letter])

對(duì)于未知的元素,Counter不會(huì)產(chǎn)生KeyError。如果在輸入中沒(méi)有找到某個(gè)值,則其計(jì)數(shù)為0

elements()方法返回一個(gè)迭代器,將生成Counter知道的所有元素。

#! /usr/bin/env python
#coding=utf-8
import collections

c = collections.Counter('extremely')
c['z'] = 0
print c
print list(c.elements())

不能保證元素的順序不變,另外計(jì)數(shù)小于或等于0的元素不包含在內(nèi)。

使用most_common()可以生成一個(gè)序列,其中包含n個(gè)最常遇到的輸入值及其對(duì)應(yīng)計(jì)數(shù)。

#! /usr/bin/env python
#coding=utf-8
import collections

c = collections.Counter()

filepath = r'your real path'

with open(filepath, 'rt') as f:
    for line in f:
        c.update(line.rstrip().lower())
        
print 'Most common'
for letter, count in c.most_common(10):
    print '%s: %7d' % (letter, count)

Counter實(shí)例支持算術(shù)和集合操作來(lái)完成結(jié)果的聚集

#! /usr/bin/env python
#coding=utf-8
import collections

c1 = collections.Counter(['a', 'b', 'c', 'a', 'b', 'b'])
c2 = collections.Counter('alphabet')

print "C1:", c1
print "C2:", c2

print "\nCombined counts:"
print c1 + c2

print '\nSunstraction'
print c1 - c2

print '\nIntersection (taking positive minumums)'
print c1 & c2

print '\nUnion (taking maximums)'
print c1 | c2

每次通過(guò)一個(gè)操作生成一個(gè)新的Counter時(shí),計(jì)數(shù)為0或負(fù)數(shù)的元素都會(huì)被刪除。

defaultdict
標(biāo)準(zhǔn)字典包括一個(gè)方法setdefault()來(lái)獲取一個(gè)值,如果這個(gè)值不存在則建立一個(gè)默認(rèn)值。與之相反,defaultdict初始化容器時(shí)會(huì)讓調(diào)用者提前指定默認(rèn)值。

#! /usr/bin/env python
#coding=utf-8
import collections

def default_factory():
    return 'default value'

d = collections.defaultdict(default_factory, foo='bar')
print 'd', d
print 'foo ==>', d['foo']
print 'bar ==>', d['bar']
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,533評(píng)論 19 139
  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫完項(xiàng)目接著寫寫一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,791評(píng)論 1 118
  • 原文鏈接:http://www.startup-partner.com/2006.html 政策紅利就是創(chuàng)業(yè)風(fēng)口,...
    思達(dá)派閱讀 149評(píng)論 0 0
  • 這是一條熱鬧的巷子 有著甜膩的糖果和好吃的水果 在巷子深處召喚 我最愛(ài)的葡萄架子 也在那里 還有那輕搖的蒲扇 以及...
    青正堂主閱讀 188評(píng)論 0 3
  • 2017.8.19不知不覺(jué)親子閱讀打卡計(jì)劃已經(jīng)堅(jiān)持到了47天了,閱讀容易堅(jiān)持不易,打卡容易堅(jiān)持也不易!想想堅(jiān)持下去...
    博古茹今閱讀 200評(píng)論 0 0

友情鏈接更多精彩內(nèi)容