Как отсортировать словарь по ключу в цифровом порядке 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 также поддерживает сравнение производительности нескольких популярных реализаций.

  • сортировать список словаря, беря целочисленное значение ключей, хранящихся в виде строки
  • Эффективный способ разделить большой текстовый файл на python
  • Pandas сортировать по совокупности групп и столбцам
  • список сортировки в python
  • Сортировка словаря словарей по нескольким значениям дочернего словаря
  • Самый быстрый способ получить отсортированный уникальный список в python?
  • Python Pandas: как разбить отсортированный словарь в столбце кадра данных
  • как эффективно получить k больших элементов списка в python
  • Как преобразовать значения словаря в int в Python?
  • Попытка понять алгоритм сортировки вставки
  • Внешний вид на месте
  •  
    Interesting Posts for Van-Lav

    Невозможно воспроизвести значение расстояния между источниками, полученными с помощью астрометрии

    pandas, matplotlib, использовать индекс данных в качестве метки тика оси

    Python: скомпилируйте в приложение командной строки Unix

    Django RedirectView и reverse () не работают вместе?

    Как заставить python печатать numpy datetime64 с заданным часовым поясом?

    Как кэшировать чтения?

    Как установить значение столбца по умолчанию в db с помощью миграции django 1.7.3 / postgres?

    NLTK Маркировка испанских слов с использованием корпуса

    Как написать два листа в одной книге одновременно с помощью openpyxl

    Unescaping escape-символов в строке с использованием Python 3.2

    Трассировка фазового пространства рисования со стрелками в matplotlib

    Веб-скребок – как получить доступ к контенту, представленному в JavaScript через Angular.js?

    от одного пользователя к нескольким пользователям приложения Django

    Извлечение аннотаций / комментариев в формате PDF

    Python 2.6: класс внутри класса?

    Python - лучший язык программирования в мире.