Contents

## 1. Introduction

Dictionaries in python are unsorted. They are stored by the **hash** value of the key, and this allows for fast lookup. In this article, we show a couple of ways in which dictionaries can be sorted.

## 2. List of Sorted Keys

Here is a sample dict that we are going to be working with.

prices = {'Apple': 1.99, 'Banana': 0.99, 'Orange': 1.49, 'Cantaloupe': 3.99, 'Grapes': 0.39}

You can obtain a sorted list of the keys using the **sorted()** function on the **iterkeys()** method.

print sorted(prices.iterkeys()) # prints ['Apple', 'Banana', 'Cantaloupe', 'Grapes', 'Orange']

Which is essentially the same as the using the **sorted()** function on the dict itself. This is because the **sorted()** function accesses the iterator of the argument, and the dictionary returns an iterator over the keys.

print sorted(prices) # prints ['Apple', 'Banana', 'Cantaloupe', 'Grapes', 'Orange']

## 3. Sorting By Keys

That is all very well for obtaining a *sorted list of keys*, but what if we want the whole dictionary sorted in some form of a list.

Well, the method **iteritems()** returns an iterator of the key-value tuples of the dictionary, so you can apply the **sorted()** function to the return value. This returns a list of tuples sorted by the key.

print sorted(prices.iteritems()) # prints [('Apple', 1.99), ('Banana', 0.99), ('Cantaloupe', 3.99), ('Grapes', 0.39), ('Orange', 1.49)]

## 4. Sorting By Values

The same method as above can be used to sort a dictionary by values in a couple of variations. First is to use the **key** argument to the **sorted()** function as follows. For each key-value tuple, we return the second item of the tuple as the sort key so the list of tuples is not sorted by the value.

print sorted(prices.iteritems(), key = lambda x : x[1]) # prints [('Grapes', 0.39), ('Banana', 0.99), ('Orange', 1.49), ('Apple', 1.99), ('Cantaloupe', 3.99)]

And here is another method to sort a dictionary by keys. This method specifies a comparison function to the **sorted()** function which receives two tuples to compare and uses **cmp()** to compare the second element of each. This method is more general in the sense that you can specify arbitrary conditions in the comparison function.

print sorted(prices.iteritems(), lambda x, y : cmp(x[1], y[1])) # prints [('Grapes', 0.39), ('Banana', 0.99), ('Orange', 1.49), ('Apple', 1.99), ('Cantaloupe', 3.99)]

## 5. List of Sorted Values

And finally, to obtain a list of sorted values, we use **itervalues()** method and pass the result to the **sorted()** function.

print sorted(prices.itervalues()) # prints [0.39, 0.99, 1.49, 1.99, 3.99]

## 6. Reversing the Sort Order

In the all the cases above where we used the **sorted()** function, we can reverse the sort order merely by passing the option * reverse=True*.

print sorted(prices.itervalues(), reverse=True) # prints [3.99, 1.99, 1.49, 0.99, 0.39]

## Conclusion

To review, we learnt various aspects of sorting dictionaries. These included: obtaining a list of sorted keys and sorted values. Key-value pairs can be extracted as a list of tuples which are sorted by key or value.