首页 > 代码库 > [翻译]Python Module of The Week: Counter
[翻译]Python Module of The Week: Counter
Counter是一个来跟踪加入多少个相同值的容器。
初始化:
Counter支持三种形式的初始化。它的构造器可以被一组元素来调用,一个包含键值和计数的字典,或者使用关键字参数字符串名称到计数的映射。
import collectionsprint 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.pyCounter({‘b‘: 3, ‘a‘: 2, ‘c‘: 1})Counter({‘b‘: 3, ‘a‘: 2, ‘c‘: 1})Counter({‘b‘: 3, ‘a‘: 2, ‘c‘: 1})
一个空的Counter可以通过无参构造,并且使用update()方法赋值
import collectionsc = collections.Counter()print ‘Initial :‘, cc.update(‘abcdaab‘)print ‘Sequence:‘, cc.update({‘a‘:1, ‘d‘:5})print ‘Dict :‘, c
计数的值跟随新的数据而增加,而不是被取代。在这个例子里,a的计数从3变为4。
$ python collections_counter_update.pyInitial : 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 collectionsc = collections.Counter(‘abcdaab‘)for letter in ‘abcde‘: print ‘%s : %d‘ % (letter, c[letter])
Counter不会对不知道的的数据项报KeyError. 如果一个值没有在输入中出现,它的计数为0
$ python collections_counter_get_values.pya : 3b : 2c : 1d : 1e : 0
elements()方法返回一个产生所有对于Counter是已知数据项的迭代器
import collectionsc = collections.Counter(‘extremely‘)c[‘z‘] = 0print cprint list(c.elements())
元素的顺序是没有保证的,而且所有元素的计数如果小于0是没有包含在内的。
$ python collections_counter_elements.pyCounter({‘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 collectionsc = 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.pyMost common:e: 235331i: 201032a: 199554
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。