Почему словари в python появляются наоборот?Почему словари кажутся отмененными?
>>> a = {'one': '1', 'two': '2', 'three': '3', 'four': '4'}
>>> a
{'four': '4', 'three': '3', 'two': '2', 'one': '1'}
Как это исправить?
Почему словари в python появляются наоборот?Почему словари кажутся отмененными?
>>> a = {'one': '1', 'two': '2', 'three': '3', 'four': '4'}
>>> a
{'four': '4', 'three': '3', 'two': '2', 'one': '1'}
Как это исправить?
Словари в python (и хэш-таблицы вообще) неупорядочены. В python вы можете использовать метод sort()
на ключах для их сортировки.
Хорошо, я буду использовать ключи/значения – myfreeweb
А что такое «стандартный заказ», который вы ожидаете? Это очень зависит от приложения. Словарь python в любом случае не гарантирует, что будет упорядочен ключ.
В любом случае вы можете перебирать словарные ключи() так, как хотите.
Словари не имеют внутреннего порядка. Вам придется либо свернуть свою собственную заказную реализацию dict, использовать ordered list
of tuple
s, либо использовать existing ordereddict
implementation.
Теперь вы знаете dicts неупорядоченен, вот как преобразовать их в список, который вы может заказ
>>> a = {'one': '1', 'two': '2', 'three': '3', 'four': '4'}
>>> a
{'four': '4', 'three': '3', 'two': '2', 'one': '1'}
отсортирован по ключевому
>>> sorted(a.items())
[('four', '4'), ('one', '1'), ('three', '3'), ('two', '2')]
отсортированных по значению
>>> from operator import itemgetter
>>> sorted(a.items(),key=itemgetter(1))
[('one', '1'), ('two', '2'), ('three', '3'), ('four', '4')]
>>>
От Python Tutorial:
Лучше думать словарь как неупорядоченный набор пар ключ: значение
и одну из Python Standard Library (около dict.items):
Детали реализации CPython: Ключи и значения перечислены в произвольном порядке, который является неслучайным, варьируется в реализациях Python и зависит от истории словаря вставки и удаления.
Так что, если вам нужно обработать Dict в определенном порядке, отсортировать ключи или значения, например:
>>> sorted(a.keys())
['four', 'one', 'three', 'two']
>>> sorted(a.values())
['1', '2', '3', '4']
Python3.1 имеет OrderedDict
>>> from collections import OrderedDict
>>> o=OrderedDict([('one', '1'), ('two', '2'), ('three', '3'), ('four', '4')])
>>> o
OrderedDict([('one', '1'), ('two', '2'), ('three', '3'), ('four', '4')])
>>> for k,v in o.items():
... print (k,v)
...
one 1
two 2
three 3
four 4
Awesome. Но я сделал это без заказанного диктофона на Python 2. – myfreeweb
и элементы в Orderedicts упорядочены, когда элементы добавляются в словарь, а не с помощью ключа или элемента. Поэтому, если вы добавляете элементы не в порядок - и OrderedDict не поможет :-) –
Что означает «исправить»? Какой порядок вы предпочитаете? –