How to sort a dictionary? It’s obvious to use the built-in sorted function, as it’s written in C and optimized already.

Note that dictionary cannot be ordered in Python, however tuples can, so one solution is to convert a dictionary to a list of tuples.

## Convert to Tuples

Start comparing the 0th elements first, then 1st elements, …

So to compare dictionary, first convert it to a list of tuples, where the 0th element is value, 1st element is key

```
d_2_t = [(v,k) for (k,v) in data_dict]
sorted(d_2_t, reverse=True)
```

Alternatively we can use the built-in zip function

```
d_2_t = list(zip(data_dict.values(), data_dict.keys()))
sorted(d_2_t, reverse=True)
```

## Sorted

Use the key parameter in sorted

```
temp = sorted(d.items(), key=lambda x:x[1], reverse=True)
res = {k:v for (k,v) in zip(range(1,len(temp)+1), temp.values())}
```

To build a rank dictionary, we can use enumerate. Note pass a 2nd parameter as the starting value

`{d[1][0]:(d[0], d[1][1]) for d in enumerate(tmp,1)}`

{% asset_img 'rank1.PNG' %}
To make the above python code more readable

`{k:(idx, v) for idx, (k,v) in enumerate(tmp,1)}`