I have a dictionary of 200,000 items (the keys are strings and the values are integers).
What is the best/most pythonic way to print the items sorted by descending value then ascending key (i.e. a 2 key sort)?
a={ 'keyC':1, 'keyB':2, 'keyA':1 } b = a.items() b.sort( key=lambda a:a[0]) b.sort( key=lambda a:a[1], reverse=True ) print b >>>[('keyB', 2), ('keyA', 1), ('keyC', 1)]
You can’t sort dictionaries. You have to sort the list of items.
Previous versions were wrong. When you have a numeric value, it’s easy to sort in reverse order. These will do that. But this isn’t general. This only works because the value is numeric.
Here’s an alternative, using an explicit function instead of a lambda and the cmp instead of the key option.
The more general solution is actually two separate sorts