Дополнительно
Как отсортировать словарь по ключу?
Каким образом можно было бы перейти от {2:3, 1:89, 4:5, 3:0}
к {1:89, 2:3, 3:0, 4:5}
?
Я просмотрел несколько постов, но все они используют оператор "sorted", который возвращает кортежи.
829
20
Стандартные словари Python являются неупорядоченными. Даже если бы вы отсортировали пары (ключ-значение), вы не смогли бы хранить их в
dict
таким образом, чтобы сохранить упорядоченность.Самый простой способ - использовать
OrderedDict
, который запоминает порядок, в котором были вставлены элементы:Не обращайте внимания на то, как выводится
od
, все будет работать как надо:Python 3
Для пользователей Python 3 необходимо использовать
.items()
вместо.iteritems()
:Сами словари не содержат упорядоченных элементов как таковых, но если вы хотите вывести их и т.д. в определенном порядке, то вот несколько примеров:
В Python 2.4 и выше:
дает:
(Python ниже 2.4:).
Источник: http://www.saltycrane.com/blog/2007/09/how-to-sort-python-dictionary-by-keys/
Из [библиотечной документации
коллекций
Python](http://docs.python.org/2/library/collections.html?highlight = orderdict # orderdict-examples-and-recipes):Для CPython / PyPy 3.6 и любого Python 3.7 или выше это легко сделать с помощью:
Существует несколько модулей Python, которые предоставляют реализации словаря, которые автоматически поддерживают ключи в отсортированном порядке. Рассмотрим модуль sortadcontainers, который представляет собой реализации pure-Python и fast-as-C. Существует также сравнение производительности с другими популярными опционами, сопоставленными друг с другом.
Использование упорядоченного диктата является неадекватным решением, если вам необходимо постоянно добавлять и удалять пары ключ / значение, а также итерацию.
Тип SortedDict также поддерживает поиск и удаление индексированных местоположений, что невозможно при встроенном типе dict.
Просто:
Вывод:
Как уже отмечалось, словари по своей природе неупорядочены. Однако если речь идет только о отображении словарей в упорядоченном виде, то можно переопределить метод
__str__
в подклассе словаря и использовать этот класс словаря, а не встроенныйdict
. Например.Обратите внимание, что это ничего не меняет в том, как хранятся ключи, в каком порядке они будут возвращаться при итерации и т.д., а только в том, как они будут отображаться с помощью
print
или в консоли python.Нашел другой способ:
upd:
В Python 3.
дает
Словарь Python был неупорядоченным до Python 3.6. В реализации CPython Python 3.6 словарь сохраняет порядок вставки. Из Python 3.7 это станет языковой функцией.
В журнале изменений Python 3.6 (https://docs.python.org/3.6/whatsnew/3.6.html#whatsnew36-compactdict):
В документе Python 3.7 (https://docs.python.org/3.7/tutorial/datastructures.html#dictionaries):
Таким образом, в отличие от предыдущих версий, вы можете отсортировать дикт после Python 3.6 / 3.7. Если вы хотите отсортировать вложенный dict, включая под-дикт внутри, вы можете сделать:
https://gist.github.com/ligyxy/f60f0374defc383aa098d44cfbd318eb
Здесь я нашел самое простое решение для сортировки диктовки питона по ключу с помощью
pprint
. например.но при использовании pprint он вернет отсортированный dict
Есть простой способ отсортировать словарь.
По вашему вопросу
Решение:
(Где c, это название вашего словаря.)
Эта программа дает следующий вывод:
как ты хотел.
Другой пример:
Дает вывод:
['Albert', 'Bill', 'John', 'Lucy', 'Peter']
Дает выходные данные:
[18, 24, 32, 36, 41]
Дает вывод:
Следовательно, изменяя его на ключи, значения и элементы, вы можете печатать так, как вы хотели. Надеюсь, это поможет!
Будет генерировать именно то, что вы хотите:
Но это не правильный способ сделать это, потому что, это может показать отчетливое поведение с разными словарями, которые я узнал недавно. Следовательно, Тим предложил идеальный путь в ответ на мой запрос, которым я здесь делюсь.
Вы можете создать новый словарь, отсортировав текущий словарь по ключам согласно вашему вопросу.
Это твой словарь
Создайте новый словарь d1, отсортировав этот d с помощью лямбда-функции
d1 должен быть {1: 89, 2: 3, 3: 0, 4: 5}, отсортирован по ключам в d.
Я думаю, что проще всего отсортировать дикт по ключу и сохранить отсортированную пару ключ: значение в новом дикте.
Чтобы прояснить это:
Дикты Python неупорядочены. Обычно это не проблема, так как наиболее распространенным вариантом использования является поиск.
Самый простой способ сделать то, что вы хотите, - это создать
collections.OrderedDict
, вставляя элементы в отсортированном порядке.Если вам нужно выполнить итерацию, как предлагали другие выше, самый простой способ - перебить отсортированные ключи. Примеры-
Печатные значения отсортированы по клавишам:
Получить список значений, отсортированных по ключам:
Я придумываю однострочную сортировку диктовки.
Надеюсь, это будет полезно.
Эта функция будет сортировать любой словарь рекурсивно по своему ключу. То есть, если какое-либо значение в словаре также является словарем, оно также будет отсортировано по его ключу. Если вы работаете на CPython 3.6 или выше, можно сделать простое изменение в использовании «dict», а не «OrderedDict».
Ребята, вы все усложняете ... это действительно просто
Выход:
Самое простое решение состоит в том, что вы должны получить список ключей dict, отсортированный порядок, а затем перетекать по dict. Например
После будет выход (по убыванию)