OrderedDict не сохраняет порядок

from collections import OrderedDict
import pprint

menu = {"about" : "about", "login" : "login", 'signup': "signup"}

menu = OrderedDict(menu)
pprint.pprint(menu.items())

import sys
sys.exit()

Результат:

[('about', 'about'), ('signup', 'signup'), ('login', 'login')]

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


person user455318    schedule 07.10.2014    source источник
comment
Это важная ошибка (ошибочно присваивая сначала dict, а затем OrderedDict), которую многие из нас независимо обнаружили и почесали в затылках ... этот вопрос совершенно законен, документирует важную ошибку и не должен был быть отклонен. Глубоко нелогично, OrderedDict должен быть инициализирован/назначен из списка кортежей, а не из словаря, чтобы сохранить правильный порядок :)   -  person smci    schedule 11.11.2017
comment
Возможный дубликат преобразования dict в OrderedDict   -  person Ilja Everilä    schedule 01.03.2018


Ответы (2)


Поместив элементы в (неупорядоченный) dict и создав из него OrderedDict, вы уже отбросили первоначальный порядок. Создайте OrderedDict из списка кортежей, а не из словаря.

person Sneftel    schedule 07.10.2014

Пожалуйста, найдите фрагмент кода ниже

>>> from collections import OrderedDict
>>> listKeyVals = [(1,"One"),(2,"Two"),(3,"Three"),(4,"Four"),(5,"Five")]
>>> x = OrderedDict(listKeyVals)
>>> x
OrderedDict([(1, 'One'), (2, 'Two'), (3, 'Three'), (4, 'Four'), (5, 'Five')])
>>> 

Предлагаю вам ознакомиться с примерами из моей статьи

https://techietweak.wordpress.com/2015/11/11/python-collections/

person Saravanan Subramanian    schedule 27.11.2015