python模块介绍- collections (1) Counter计数器
#承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.com qq 37391319 博客:http://blog.csdn.net/oychw#版权所有,转载刊登请来函联系# 深圳测试自动化python项目接单群113938272深圳会计软件测试兼职 6089740#深圳地摊群 66250781武冈洞口城步新宁乡情群494942791.3 collections-容器数据类型主要类型如下:namedtuple()。创建有名字域的元组子类的工厂函数。python 2.6新增。deque:双端队列,类似于列表,两端进栈和出栈都比较快速。python 2.4新增。Counter:字典的子类,用于统计哈希对象。python 2.7新增。OrderedDict:字典的子类,记录了添加顺序。python 2.7新增。defaultdict:dict的子类,调用一个工厂函数支持不存在的值。python 2.5新增。还提供了抽象基类,用来测试类是否提供了特殊接口,比如是哈希或者映射。1.3.1 Counter计数器(Counter)是一个容器,用来跟踪值出现了多少次。和其他语言中的bag或multiset类似。计数器支持三种形式的初始化。构造函数可以调用序列,包含key和计数的字典,或使用关键字参数。importcollectionsprintcollections.Counter(['a', 'b', 'c', 'a', 'b', 'b'])printcollections.Counter({'a':2, 'b':3, 'c':1})printcollections.Counter(a=2, b=3, c=1)执行结果:#./collections_counter_init.pyCounter({'b':3, 'a': 2, 'c': 1})Counter({'b':3, 'a': 2, 'c': 1})Counter({'b':3, 'a': 2, 'c': 1})注意key的出现顺序是根据计数的从大到小。可以创建空的计数器,再update:importcollectionsc =collections.Counter()print'Initial :', cc.update('abcdaab')print'Sequence:', cc.update({'a':1,'d':5})print'Dict :', c执行结果:#./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})访问计数:importcollectionsc =collections.Counter('abcdaab')forletter in 'abcde':print '%s : %d' % (letter, c[letter])执行结果:#./collections_counter_get_values.pya :3b :2c :1d :1e :0elements可以列出所有元素:importcollectionsc =collections.Counter('extremely')c['z']= 0printcprintlist(c.elements())执行结果:#./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()可以提取出最常用的。importcollectionsc =collections.Counter()withopen('/usr/share/dict/words', 'rt') as f:for line in f:c.update(line.rstrip().lower())print'Most common:'forletter, count in c.most_common(3):print '%s: %7d' % (letter, count)执行结果:#./collections_counter_most_common.pyMostcommon:e: 484673i: 382454a: 378030Counter还支持算术和集合运算,它们都只会保留数值为正整数的key。importcollectionsc1 =collections.Counter(['a', 'b', 'c', 'a', 'b', 'b'])c2 =collections.Counter('alphabet')print'C1:', c1print'C2:', c2print'\nCombined counts:'printc1 + c2print'\nSubtraction:'printc1 - c2print'\nIntersection (taking positive minimums):'printc1 & c2print'\nUnion (taking maximums):'printc1 | c2执行结果:#./collections_counter_arithmetic.pyC1:Counter({'b': 3, 'a': 2, 'c': 1})C2:Counter({'a': 2, 'b': 1, 'e': 1, 'h': 1, 'l': 1, 'p': 1, 't': 1})Combinedcounts:Counter({'a':4, 'b': 4, 'c': 1, 'e': 1, 'h': 1, 'l': 1, 'p': 1, 't': 1})Subtraction:Counter({'b':2, 'c': 1})Intersection(taking positive minimums):Counter({'a':2, 'b': 1})Union(taking maximums):Counter({'b':3, 'a': 2, 'c': 1, 'e': 1, 'h': 1, 'l': 1, 'p': 1, 't': 1})上面的例子让人觉得collections只能处理单个字符。其实不是这样的,请看标准库中的实例。>>>from collections import Counter>>>cnt = Counter()>>>for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:... cnt[word] += 1...>>>cntCounter({'blue':3, 'red': 2, 'green': 1})>>>cnt = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])>>>cntCounter({'blue':3, 'red': 2, 'green': 1})>>> import re>>> words = re.findall('\w+',open('/etc/ssh/sshd_config').read().lower())>>>Counter(words).most_common(10)[('yes', 27), ('no', 23), ('to', 12),('the', 9), ('for', 8), ('and', 8), ('protocol', 6), ('ssh', 6), ('default',6), ('this', 6)]第1段代码和第2段的代码效果式样的,后面一段代码通过Counter实现了简单的单词的统计功能。比如面试题:使用python打印出/etc/ssh/sshd_config出现次数最高的10个单词及其出现次数。下面看看Counter的相关定义:classcollections.Counter([iterable-or-mapping]) 。注意Counter是无序的字典。在key不存在的时候返回0.c['sausage'] = 0。设置值为0不会删除元素,要使用delc['sausage']。除了标准的字典方法,额外增加了:elements() :返回一个包含所有元素的迭代器,忽略小于1的计数。most_common([n]):返回最常用的元素及其计数的列表。默认返回所有元素。subtract([iterable-or-mapping]) :相减。>>> c =Counter(a=4, b=2, c=0, d=-2)>>> d =Counter(a=1, b=2, c=3, d=4)>>> c - dCounter({'a': 3})>>> cCounter({'a': 4,'b': 2, 'c': 0, 'd': -2})>>> dCounter({'d': 4,'c&补充:Web开发 , Python ,
上一个:用Python写一个简单的中文分词器
下一个:Python 语法之字典
- 更多python疑问解答:
- python 把图片转换成base64代码 python 把base64代码转换成图片
- 利用python进行网络图片下载 python批量下载远程图片
- 记录Python读写文件的代码和方法
- Python如何把图片转为Base64字符串
- python用requests.get批量下载网络远程图片的代码
- 疑难杂症,关于python与C#输出重定向
- 最近写的一个软件,对照下c#,c++,DELPHI,VB,易语言,PYTHON,PHP等执行效率
- 利用C#4.0调用IronPython脚本
- bat 执行定时python 打开url 谁搞过,帮忙看一下语句有什么问题
- 求助!在线等!python调用C#的.dll库
- Python 快速界面开发?求IDE和资料..中文的最好
- python如何读取XML文件中的
- .NET运行IronPython脚本错误
- 新手之前对编程无概念现在想转这行,想尽快入门,java ,python,.net、php、C之间如
- 新手之前对编程无概念现在想转这行,想尽快入门,java ,python,.net、php、C之间如