Порядок ключей в словарях - PullRequest
74 голосов
/ 12 апреля 2011

Код:

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

print l

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

Ответы [ 6 ]

67 голосов
/ 12 апреля 2011

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

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

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

62 голосов
/ 12 октября 2016

Python 3.7 +

В Python 3.7.0 природа сохранения порядка вставки dict объектов объявлена ​​ официальной частью спецификации языка Python , Поэтому вы можете зависеть от этого.

Python 3.6 (CPython)

Начиная с Python 3.6, для реализации Python на CPython словари поддерживают порядок вставки по умолчанию. Это считается деталью реализации, хотя; вам все равно следует использовать collections.OrderedDict, если вы хотите упорядочить вставку, гарантированную в других реализациях Python.

Python> = 2,7 и <3,6 </h2> Используйте класс collections.OrderedDict, когда вам нужен dict, который запоминает порядок вставленных предметов.

43 голосов
/ 12 апреля 2011
>>> print sorted(d.keys())
['a', 'b', 'c']

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

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

12 голосов
/ 12 апреля 2011

С http://docs.python.org/tutorial/datastructures.html:

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

12 голосов
/ 12 апреля 2011

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

l = sorted(d.keys())
1 голос
/ 08 февраля 2019

Хотя порядок не имеет значения, так как в словаре есть hashmap.Зависит от порядка, в котором он вводится:

s = 'abbc'
a = 'cbab'

def load_dict(s):
    dict_tmp = {}
    for ch in s:
        if ch in dict_tmp.keys():
            dict_tmp[ch]+=1
        else:
            dict_tmp[ch] = 1
    return dict_tmp

dict_a = load_dict(a)
dict_s = load_dict(s)
print('for string %s, the keys are %s'%(s, dict_s.keys()))
print('for string %s, the keys are %s'%(a, dict_a.keys()))

вывод:
для строки abbc, ключи - dict_keys (['a', 'b', 'c'])
для строки cbab ключи являются dict_keys (['c', 'b', 'a'])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...