Правильный ответ заключается в том, что если вы хотите, чтобы элементы словаря были отсортированы в порядке, вы должны использовать функцию sorted () при циклическом переключении словаря :
for k, v in sorted(d.items()):
print k, ':', v
или
for k in sorted(d):
print d[k]
или аналогичные.
Упомянутый OrderedDict предназначен для словарей, имеющих порядок.И порядок не такой, как сортировка.Да, вы можете создать отсортированный OrderedDict, но как только вы добавляете новый ключ, он больше не сортируется. Так что вам все равно придется использовать sorted () для сортировки перед каждым использованием или после каждой манипуляции.Таким образом, OrderedDict работает медленнее и требует больше памяти, чем обычный словарь, и при этом ничего не добавляет.
OrderedDict не для отсортированных словарей, но для словарей, где элементы имеют какой-то порядок, то есть не сортировка.Например, если вы хотите показать вещи в том порядке, в котором они были добавлены, или если вы хотите, чтобы пользователи могли заказывать вещи произвольно.
Обновление: дальнейшие объяснения
Почему OrderedDict не является решением?Потому что OrderedDict заказан , а не отсортирован .
Рассмотрим стандартный словарь:
>>> d = {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5}
Он не отсортирован, как мы увидим ниже, 'c' будет стоять перед 'b'.Он также не имеет порядка, если мы добавляем новые вещи, это выглядит как случайный порядок:
>>> d['g'] = 6
>>> d['i'] = 8
>>> d
{'a': 0, 'c': 2, 'b': 1, 'e': 4, 'd': 3, 'g': 6, 'f': 5, 'i': 8}
ОК, поэтому давайте использовать OrderedDict тогда:
>>> o = OrderedDict(sorted({'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5}.items()))
>>> o
OrderedDict([('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5)])
Ага!Сортировка!Так OrderedDict работает !?Нет.
>>> o['i'] = 8
>>> o['g'] = 6
>>> o
OrderedDict([('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('i', 8), ('g', 6)])
Что?G закончился после i?!?Зачем!?Поскольку OrderedDict не отсортирован, он упорядочен .Он запоминает порядок добавляемых вами вещей.Не сортировка.Это означает, что каждый раз, когда вы используете его, вам нужно сначала отсортировать его.OrderedDict будет сортироваться только до тех пор, пока вы не добавите к нему ключи.Но если вы не собираетесь изменять его, вам не нужен диктат.Вы также можете иметь список.Вот что вы получаете из sorted ():
>>> sorted(o.items())
[('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('g', 6), ('i', 8)]
Но это работает так же хорошо со стандартным словарем, поэтому OrderedDictionary не помог:
>>> sorted(d.items())
[('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('g', 6), ('i', 8)]
Заключение Так что каждый раз, когда вы хотите перебрать словарь в отсортированном виде, вам нужно сделать:
>>> for k in sorted(o):
... print k, o[k]
...
a 0
b 1
c 2
d 3
e 4
f 5
g 6
i 8
И это независимо от того, какой словарь вы используете .OrderedDict на самом деле вам не помогает, потому что его не волнует сортировка , просто порядок , в который вы добавляете вещи.