Подтвердить что ты не робот

Ключевой порядок в словарях Python

код:

d = {'a': 0, 'b': 1, 'c': 2}
l = d.keys()

print l

Это печатает ['a', 'c', 'b']. Я не уверен, как метод определяет порядок ключевых слов в пределах l. Тем не менее, я хотел бы иметь возможность извлекать ключевые слова в "правильном" порядке. Правильный порядок, конечно, создаст список ['a', 'b', 'c'].

4b9b3361

Ответ 1

Вы можете использовать OrderedDict (требуется Python 2.7) или выше.

Также обратите внимание, что OrderedDict({'a': 1, 'b':2, 'c':3}) не будет работать, так как dict, созданный с помощью {...}, уже забыл порядок элементов. Вместо этого вы хотите использовать OrderedDict([('a', 1), ('b', 2), ('c', 3)]).

Как упоминалось в документации, для версий ниже Python 2.7 вы можете использовать этот рецепт.

Ответ 2

>>> print sorted(d.keys())
['a', 'b', 'c']

Используйте отсортированную функцию, которая сортирует передаваемый итератор.

Метод .keys() возвращает ключи в произвольном порядке.

Ответ 3

Из словарей Python 3.6 on поддерживает порядок вставки по умолчанию. Однако сохранение заказа еще не "гарантировано" (оно, вероятно, будет в 3.7):

Рассматривается аспект сохранения порядка этой новой реализации детали реализации и не следует полагаться (это может изменения в будущем, но желательно, чтобы этот новый диктофон реализации на языке для нескольких выпусков до изменения спецификацию языка для мандатной семантики сохранения порядка для всех текущих и будущие реализации Python; это также помогает сохранить обратная совместимость со старыми версиями языка, где случайный порядок итерации все еще действует, например. Python 3.5).

Итак, теперь вы должны использовать collections.OrderedDict, если хотите иметь упорядоченный словарь.

Ответ 4

Просто отсортируйте список, если хотите его использовать.

l = sorted(d.keys())

Ответ 5

Из http://docs.python.org/tutorial/datastructures.html:

"Метод keys() словарного объекта возвращает список всех ключей, используемых в словаре, в произвольном порядке (если вы хотите, чтобы он отсортировался, просто примените к нему функцию sorted()).