上篇关于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中的有序字典。