How to sort Counter by value? - python
Question: Other than doing list comprehensions of reversed list comprehension, is there
a pythonic way to sort Counter by value? If so, it is faster than this:

    
    
    >>> from collections import Counter
    >>> x = Counter({'a':5, 'b':3, 'c':7})
    >>> sorted(x)
    ['a', 'b', 'c']
    >>> sorted(x.items())
    [('a', 5), ('b', 3), ('c', 7)]
    >>> [(l,k) for k,l in sorted([(j,i) for i,j in x.items()])]
    [('b', 3), ('a', 5), ('c', 7)]
    >>> [(l,k) for k,l in sorted([(j,i) for i,j in x.items()], reverse=True)]
    [('c', 7), ('a', 5), ('b', 3)
    


Answer: Use the [`Counter.most_common()`
method](http://docs.python.org/2/library/collections.html#collections.Counter.most_common),
it'll sort the items _for you_ :

    
    
    >>> from collections import Counter
    >>> x = Counter({'a':5, 'b':3, 'c':7})
    >>> x.most_common()
    [('c', 7), ('a', 5), ('b', 3)]
    

It'll do so in the most efficient manner possible; if you ask for a Top N
instead of all values, a `heapq` is used instead of a straight sort:

    
    
    >>> x.most_common(1)
    [('c', 7)]
    

Outside of counters, sorting can always be adjusted based on a `key` function;
`.sort()` and `sorted()` both take callable that lets you specify a value on
which to sort the input sequence; `sorted(x, key=x.get, reverse=True)` would
give you the same sorting as `x.most_common()`, but only return the keys, for
example:

    
    
    >>> sorted(x, key=x.get, reverse=True)
    ['c', 'a', 'b']
    

or you can sort on only the value given `(key, value)` pairs:

    
    
    >>> sorted(x.items(), key=lambda pair: pair[1], reverse=True)
    [('c', 7), ('a', 5), ('b', 3)]
    

See the [Python sorting howto](http://docs.python.org/2/howto/sorting.html)
for more information.

