Ключевой порядок в словарях Python
код:
d = {'a': 0, 'b': 1, 'c': 2}
l = d.keys()
print l
Это печатает ['a', 'c', 'b']. Я не уверен, как метод определяет порядок ключевых слов в пределах l. Тем не менее, я хотел бы иметь возможность извлекать ключевые слова в "правильном" порядке. Правильный порядок, конечно, создаст список ['a', 'b', 'c'].
Ответы
Ответ 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()).