有序字典不保留顺序

7
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不起作用。


4
这是一个重要的“坑点”(错误地先将值分配到字典然后再是有序字典),很多人独自发现并感到困惑......这个问题非常合理,记录了一个重要的“坑点”,不应该被投票降低。深入地说,为了保持正确的顺序,有序字典必须从元组列表中初始化/赋值,而不是从字典中。 :) - smci
可能是将dict转换为OrderedDict的重复问题。 - Ilja Everilä
2个回答

13

通过将项目放入(无序)字典中并从中构建OrderedDict,您已经丢弃了原始顺序。请使用元组列表而不是字典来构建OrderedDict。


1
请查看以下代码片段。
>>> 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/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接