Counter in Python


Counter is a container object, the main role is to statistically hash objects, you can use three ways to initialize an iteratable object within the parameter

Counter("success")

Input keyword parameter

Counter((s=3,c=2,e=1,u=1))

Input dictionary

Counter({"s":3, "c"=2, "e"=1, "u"=1})

Related course: Complete Python Programming Course & Exercises

Python Counter

Counter() object and several methods can be called, the code is described in the respective

from collections import Counter
lists = ['a', 'a', 'b', 5, 6, 7, 5]
a = Counter(lists)
print(a) # Counter({'a': 2, 5: 2, 'b': 1, 6: 1, 7: 1})
a.elements() # Get all the keys in a, the return is an object, we can convert it through list
a.most_common(2) # The first two elements with the highest frequency of appearance have their number of times, the return is the list of nested tuple\
a['zz'] # When access does not exist, default return 0
a.update ("aa5bzz") # Update the object being counted, i.e. add the original counted value to the new one, not replace it
a.subtrct ("aaa5z") # achieved by subtracting the original count value, resulting in a run of 0 and negative values

Create Counter object

The examples below create a counter object

>>> c = Counter() # Create a new empty counter
>>> c = Counter('abcasdf') # Counter generated by an iterative object
>>> c = Counter({'red': 4, 'yello': 2}) # A mapped generated counter
>>> c = Counter(cats=2, dogs=5) # Counter generated by keyword argument

More examples:

# counter generates counter, although it doesn't do much here
>>> from collections import Counter
>>> c = Counter('abcasd')
>>>> c
Counter({'a': 2, 'c': 1, 'b': 1, 's': 1, 'd': 1})
>>> c2 = Counter(c)
>>> c2
Counter({'a': 2, 'c': 1, 'b': 1, 's': 1, 'd': 1})

Because Counter implements the missing method of the dictionary, the return value is 0 when accessing a key that does not exist:

>>> c = Counter(['apple', 'pear'])
>>> c['orange']
0

elements()

elements() returns elements repeatedly as counted by counter

>>> c = Counter(a=4, b=2, c=0, d=-2)
>>> list(c.elements())
['a', 'a', 'a', 'a', 'b', 'b']

most_common(n)

most_common(n) returns the list of the first n items in descending order according to the counter's count; n returns all when ignored

>>> Counter('abracadabra').most_common(3)
[('a', 5), ('r', 2), ('b', 2)]

substract(iterable/mapping)

counter subtracts the count by the corresponding element

>>> c = Counter(a=4, b=2, c=0, d=-2)
>>> d = Counter(a=1, b=2, c=3, d=4)
>>> c.subtract(d)
>>>> c
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})

update(iterable/mapping)

Unlike the dictionary update method, here the value of the same key is added instead of overwritten when updating the counter.

# This method is also called when you instantiate Counter

# Mathematical set operations between Counter
>>> c = Counter(a=3, b=1, c=5)
>>> d = Counter(a=1, b=2, d=4)
>>> c + d # counter sums, value of same key sums
Counter({'c': 5, 'a': 4, 'd': 4, 'b': 3})
>>> c - d # counter phase minus, value of same key phase minus, only positive value is retained

Counter({'c': 5, 'a': 2})
>>> c & d # Intersection: take the key of both, value the smaller one
Counter({'a': 1, 'b': 1})
>>> c | d # Merge: Aggregate all keys, key same case, take large value
Counter({'c': 5, 'd': 4, 'a': 3, 'b': 2})

Common practice:

These are common practices on the Counter class/object.

# The .values() method inherited from the dictionary returns a list of values, then sums them
sum(c.values())

# inherited from the dictionary's .clear() method, clear the counter
c.clear()

# Returns the list of keys
list(c)

# Returns the set of keys
set(c)

# Transformed into a dictionary
dict(c)

# Translated into a list of (elements, values)
c.items()

# Transform from a list of (elements, count values) to Counter
Counter(dict(list_of_pairs))

# List of least n counted (elements, counted values)
c.most_common()[:-n-1:-1]

# Use the sum of the counters to remove the negative and 0 values
c += Counter()