Сортировка словарей производится при помощи встроенной функцией 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}