python3moduleoftheweek中文_[翻译]Python Module of The Week: Counter

Counter是一个来跟踪加入多少个相同值的容器。

初始化:

Counter支持三种形式的初始化。它的构造器可以被一组元素来调用,一个包含键值和计数的字典,或者使用关键字参数字符串名称到计数的映射。

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)

这三种形式的初始化的结果都是相同的。

$ python collections_counter_init.py

Counter({'b': 3, 'a': 2, 'c': 1})

Counter({'b': 3, 'a': 2, 'c': 1})

Counter({'b': 3, 'a': 2, 'c': 1})

一个空的Counter可以通过无参构造,并且使用update()方法赋值:

import collections

c = collections.Counter()

print 'Initial :', c

c.update('abcdaab')

print 'Sequence:', c

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

print 'Dict :', c

计数的值跟随新的数据而增加,而不是被取代。在这个例子里,a的计数从3变为4。

$ python collections_counter_update.py

Initial : Counter()

Sequence: Counter({'a': 3, 'b': 2, 'c': 1, 'd': 1})

Dict : Counter({'d': 6, 'a': 4, 'b': 2, 'c': 1})

访问Counts

一旦一个Counter被赋值了,它的值可以使用字典API去获得

import collections

c = collections.Counter('abcdaab')

for letter in 'abcde':

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

Counter不会对不知道的的数据项报KeyError. 如果一个值没有在输入中出现,它的计数为0

$ python collections_counter_get_values.py

a : 3

b : 2

c : 1

d : 1

e : 0

elements()方法返回一个产生所有对于Counter是已知数据项的迭代器

import collections

c = collections.Counter('extremely')

c['z'] = 0

print c

print list(c.elements())

元素的顺序是没有保证的,而且所有元素的计数如果小于0是没有包含在内的。

$ python collections_counter_elements.py

Counter({'e': 3, 'm': 1, 'l': 1, 'r': 1, 't': 1, 'y': 1, 'x': 1, 'z': 0})

['e', 'e', 'e', 'm', 'l', 'r', 't', 'y', 'x']

使用most_common()方法来产生一个第n长出现的输入值的序列以及对应的计数。

import collections

c = collections.Counter()

with open('/usr/share/dict/words', 'rt') as f:

for line in f:

c.update(line.rstrip().lower())

print 'Most common:'

for letter, count in c.most_common(3):

print '%s: %7d' % (letter, count)

这个例子计数系统字典里所有出现的字符,然后产生一个频率分布,然后打印出最长出现的三个字符。给most_common()不赋参数,会产生一个所有数据项的序列,依据频率排序。

$ python collections_counter_most_common.py

Most common:

e: 235331

i: 201032

a: 199554

作者:bluescorpio

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值