python中collections中的counter类_python collections中Counter类

Counter是dict的一个子类,因此具有dict的属性与方法。如常用的iteritems, items, get, pop。

class Counter(dict):

如果Key不存在,将返回0,不会引发KeyError异常。

def __mising__(self, key):

return 0

elements()

返回一个生成器,需要用到 itertools 标准库中的chain,starmap,repeat等方法,itertools是关于迭代器的工具。

def elements(self):

return _chain.from_iterable(_starmap(_repeat, self.iteritems()))

most_common()

列出前n个出现次数最多的元素。如果n是默认值(None),将列出所有元素。sorted 是内建函数,返回有序列表。heapq 是关于数据结构堆的操作。

def most_common(self, n=None):

if n is None:

return sorted(self.iteritems(), key=_itemgetter(1), reverse=True)

return _heapq.nlargest(n, self.iteritems(), key=_itemgetter(1))

update()

根据参数,增加key的计数。无论输入还是输出,value都允许是负值。

单从args参数来看,如果args[1]是一个Counter()对象,则在此对象的基础上进行统计。否则,从0计数。

self_get(elem, 0),如果key不存在的话,则记为0。

def update(*args, **kwds):

if not args:

raise TypeError("descriptor 'update' of 'Counter' object "

"needs an argument")

self = args[0]

args = args[1:]

if len(args) > 1:

raise TypeError('expected at most 1 arguments, got %d' % len(args))

iterable = args[0] if args else None

if iterable is not None:

if isinstance(iterable, Mapping):

if self:

self_get = self.get

for elem, count in iterable.iteritems():

self[elem] = self_get(elem, 0) + count

else:

super(Counter, self).update(iterable) # fast path when counter is empty

else:

self_get = self.get

for elem in iterable:

self[elem] = self_get(elem, 0) + 1

if kwds:

self.update(kwds)

substract()

与update()相反,减少key的计数。

def subtract(*args, **kwds):

if not args:

raise TypeError("descriptor 'subtract' of 'Counter' object "

"needs an argument")

self = args[0]

args = args[1:]

if len(args) > 1:

raise TypeError('expected at most 1 arguments, got %d' % len(args))

iterable = args[0] if args else None

if iterable is not None:

self_get = self.get

if isinstance(iterable, Mapping):

for elem, count in iterable.items():

self[elem] = self_get(elem, 0) - count

else:

for elem in iterable:

self[elem] = self_get(elem, 0) - 1

if kwds:

self.subtract(kwds)

copy

返回对象的一个浅拷贝。self.class 指 。

def copy(self):

'Return a shallow copy.'

return self.__class__(self)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值