Counter是dict的一个子类,因此具有dict的属性与方法。如常用的iteritems, items, get, pop。
如果Key不存在,将返回0,不会引发KeyError异常。
1 2
| def __mising__(self, key): return 0
|
elements()
返回一个生成器,需要用到 itertools 标准库中的chain,starmap,repeat等方法,itertools是关于迭代器的工具。
1 2
| def elements(self): return _chain.from_iterable(_starmap(_repeat, self.iteritems()))
|
most_common()
列出前n个出现次数最多的元素。如果n是默认值(None),将列出所有元素。sorted 是内建函数,返回有序列表。heapq 是关于数据结构堆的操作。
1 2 3 4
| 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。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 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) else: self_get = self.get for elem in iterable: self[elem] = self_get(elem, 0) + 1 if kwds: self.update(kwds)
|
substract()
与update()相反,减少key的计数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 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 指 。
1 2 3
| def copy(self): 'Return a shallow copy.' return self.__class__(self)
|