I was reading python collections’s Counter. It says following:
>>> from collections import Counter >>> Counter({'z': 9,'a':4, 'c':2, 'b':8, 'y':2, 'v':2}) Counter({'z': 9, 'b': 8, 'a': 4, 'c': 2, 'y': 2, 'v': 2})
Somehow these printed values are printed in descending order (9 > 8 > 4 > 2). Why is it so? Does Counter
store values sorted?
PS: Am on python 3.7.7
Advertisement
Answer
In terms of the data stored in a Counter
object: The data is insertion-ordered as of Python 3.7, because Counter
is a subclass of the built-in dict
. Prior to Python 3.7, there was no guaranteed order of the data.
However, the behavior you are seeing is coming from Counter.__repr__
. We can see from the source code that it will first try to display using the Counter.most_common
method, which sorts by value in descending order. If that fails because the values are not sortable, it will fall back to the dict
representation, which, again, is insertion-ordered.