Сообщить об ошибке.

Сортировка словаря по значению и/или ключу в Python

Сортировка словарей производится при помощи встроенной функцией sorted() и происходит немного сложнее чем сортировка списков или кортежей.

Сортировка словаря по ключу.

Функция sorted() работает со всеми объектами, которые поддерживают итерирование. Словарь, в свою очередь при итерировании, выдает только ключи, но нам необходимо получить исходный отсортированный словарь, а не только отсортированные ключи. Следовательно из словаря необходимо получить итерацию [(key, val), (key, val), ...], затем отсортировать ее по значению key и преобразовать обратно в словарь.

Список кортежей (key, val) можно получить методом словаря dict.items().

>>> d = {'b': 9, 'a': 3, 'c': 7}
# получаем итерацию кортежей `(key, val)`
>>> d.items()
# dict_items([('b', 9), ('a', 3), ('c', 7)]) # то что нужно

Так как значение key стоит первым, то и ключ для сортировки укажем как lambda x: x[0], где x - это кортеж (key, val)

# исходный словарь
>>> d = {'b': 9, 'a': 3, 'c': 7}
# собственно сама сортировка
>>> sorted_tuple = sorted(d.items(), key=lambda x: x[0])
# получили отсортированный список кортежей, 
# отсортированных по первому значению
>>> sorted_tuple
# [('a', 3), ('b', 9), ('c', 7)]
# преобразовываем обратно в словарь
dict(sorted_tuple)
# {'a': 3, 'b': 9, 'c': 7}

Сортировка словаря по значению.

Применяя методику сортировки описанную выше, можно легко догадаться как сортировать словарь по значению. Для этого просто укажем в качестве ключа сортировки индекс значения словаря в полученном списке кортежей: lambda x: x[1], где x - это кортеж (key, val)

>>> d = {'b': 9, 'a': 3, 'c': 7}
>>> sorted_tuple = sorted(d.items(), key=lambda x: x[1])
>>> sorted_tuple
# [('a', 3), ('c', 7), ('b', 9)]
# преобразовываем обратно в словарь
>>> dict(sorted_tuple)
# {'a': 3, 'c': 7, 'b': 9}

Для получения ключа сортировки из dict.items(), так же можно использовать функцию operator.itemgetter():

>>> d = {'b': 9, 'a': 3, 'c': 7}
>>> import operator
>>> sorted_tuple = sorted(d.items(), key=operator.itemgetter(1))
>>> sorted_tuple
# [('a', 3), ('c', 7), ('b', 9)]
>>> dict(sorted_tuple)
# {'a': 3, 'c': 7, 'b': 9}