2014-10-07 3 views
2
from collections import OrderedDict 
import pprint 

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

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

import sys 
sys.exit() 

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

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

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

+0

, как вы можете видеть, вы не одиноки получать downvotes без всякой причины. –

+0

Это важный вопрос (ошибочно назначающий сначала dict, а затем OrderedDict), который многие из нас самостоятельно открыли и поцарапали наши головы ... этот вопрос совершенно законный, документирует важную информацию и не должен быть замедлен. ** Глубоко контринтуитивно, OrderedDict должен быть инициализирован/назначен из списка кортежей, а не из dict **, чтобы сохранить правильный порядок :) – smci

+0

Возможный дубликат [Преобразование dict в OrderedDict] (https: // stackoverflow .com/вопросы/15711755/превращающего ДИКТ-к-ordereddict) –

ответ

7

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

0

Вы можете найти фрагмент кода ниже

>>> 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/

Смежные вопросы