Как отсортировать словарь по ключу в цифровом порядке Python

Вот словарь выглядит так:

{'57481': 50, '57480': 89, '57483': 110, '57482': 18, '57485': 82, '57484': 40} 

Я хотел бы отсортировать словарь в числовом порядке, результатом должен быть:

 {'57480': 89, '57481': 50, '57482': 18, '57483': 110, '57484': 40, '57485': 82} 

Я попробовал sorted(self.docs_info.items) но он не работает.

3 Solutions collect form web for “Как отсортировать словарь по ключу в цифровом порядке Python”

Если вам нужно только сортировать по ключу, вы уже на 95%. Предполагая, что ваш словарь, как представляется, называется docs_info :

 for key, value in sorted(docs_info.items()): # Note the () after items! print(key, value) 

Поскольку словарные ключи всегда уникальны, вызов, sorted по docs_info.items() (который представляет собой последовательность кортежей), эквивалентен сортировке только ключами.

Имейте в виду, что строки, содержащие числа, сортируются неинтуитивно! например, "11" «меньше», чем "2" . Если вам нужны их отсортированные численно, я рекомендую делать ключи int вместо str ; например

 int_docs_info = {int(k) : v for k, v in docss_info.items()} 

Это, конечно, просто изменяет порядок доступа к элементам словаря, что обычно является достаточным (поскольку, если вы не обращаетесь к нему, какое это имеет значение, если он отсортирован?). Если по какой-то причине вам нужно, чтобы сам dict был «отсортирован», вам придется использовать collections.OrderedDict , который запоминает порядок, в который элементы были вставлены в него . Таким образом, вы можете сначала отсортировать словарь (как указано выше), а затем создать OrderedDict из отсортированных (ключ, значение) пар:

 sorted_docs_info = collections.OrderedDict(sorted(docs_info.items())) 

Стандартные питоны Python «неупорядочены». Вы можете использовать OrderedDict , взгляните на документы :

 from collections import OrderedDict d = {'57481': 50, '57480': 89, '57483': 110, '57482': 18, '57485': 82, '57484': 40} OrderedDict(sorted(d.items(), key=lambda t: t[0])) # OrderedDict([('57480', 89), ('57481', 50), ('57482', 18), ('57483', 110), ('57484', 40), ('57485', 82)]) 

Если повторная сортировка элементов и их вставка в упорядоченном dict слишком медленны, рассмотрите одну из отсортированных реализаций dict на PyPI. Тип данных SortedDict эффективно поддерживает свои ключи в отсортированном порядке. Модуль sortedcontainers содержит одну такую ​​реализацию.

Установка из PyPI проста:

 pip install sortedcontainers 

Если вы не можете pip install просто скопируйте файлы sortedlist.py и sorteddict.py из хранилища с открытым исходным кодом . SortedContainers реализована в чистом Python, но реализована как fast-as-C.

После установки просто:

 In [1]: from sortedcontainers import SortedDict In [6]: SortedDict({'57481': 50, '57480': 89, '57483': 110, '57482': 18, '57485': 82, '57484': 40}) Out[6]: SortedDict({'57480': 89, '57481': 50, '57482': 18, '57483': 110, '57484': 40, '57485': 82}) 

Модуль sortedcontainers также поддерживает сравнение производительности нескольких популярных реализаций.

  • Почему мой MergeSort настолько медленный в Python?
  • Python: сортировочный словарь словарей
  • Как отсортировать словарь для печати с самого высокого значения до самого низкого для каждого ключа?
  • Эмпирическая сложность реализации «сортировки библиотеки», похоже, не похожа на O (n log n)
  • Как правильно отсортировать строку с номером внутри?
  • Numpy: сортировка по ключевым функциям
  • Pandas сортировать по совокупности групп и столбцам
  • Сортировка алфавитно-цифровых клавиш словаря в python
  • Python - лучший язык программирования в мире.