上篇关于defaultdict的介绍里,我们拿网站计数器举了个例子。
实际上python的collections模块还提供了一个专用于计数的Counter类,它本身的特性和内置的许多方法可以更便捷的实现计数器功能。
首先看看Counter类的介绍
1 | |
所以,Counter跟defaultdict一样,也是dict的子类。
Counter存在的主要目的是对对象进行计数,并将结果以哈希值的形式记录下来。
记录的时候把计数的对象存储为字典的key,把计数结果存储为字典的value。
如何使用
下面还是拿网站计数器为例来介绍如何使用Counter。
创建计数器
1 | |
如何为访问计数
1 | |
结果可见,Counter实例本身是一个有序字典。
关于有序字典,我们会在下一篇博客中介绍。
查看访问次数最多的两个IP
1 | |
Counter.most_common方法以k, v元组对的形式返回计数器内值最大的两个元素。
因为Counter实例对象是有序的,如果多个元素值相同,按顺序依次返回。
查看访问计数总量
1 | |
列出所有访问者IP
1 | |
查看某个IP访问次数
1 | |
合并多个页面访问量
1 | |
Counter中的update方法不同于dict中的update,后者处理重复元素会做替代(replace)动作,而前者是做合计(sum)动作。
当然,你也可以直接把两个页面的计数器对象相加,结果是一样的。
1 | |
减去某个页面的访问计数
如果想从总的站点计数中将某个页面的计数减掉,可以使用Counter.subtract方法:
1 | |
subtract方法从总访问计数中依次将page2对象中每个IP计数的值从总计数值中减去。
当然也可以直接用运算符来达到目的:
1 | |
Counter.elements方法
这个方法在我们的例子中貌似没有什么用处,但因为它是Counter不同于dict的一个特殊方法,还是介绍下:
1 | |
Counter.elements方法根据每个元素的计数,迭代将元素返回相对应次数。
接下来
Counter其余的函数跟dict并无二致,就不一一罗列了。
接下来要介绍一下,Python collection中的有序字典。