【问题标题】:OrderedDict does not preserve the orderOrderedDict 不保留顺序
【发布时间】:2014-12-01 16:46:21
【问题描述】:
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 不起作用。

【问题讨论】:

  • 这是一个重要的陷阱(错误地首先分配给 dict 然后是 OrderedDict),我们中的许多人独立发现并摸不着头脑......这个问题是完全合法的,记录了一个重要的陷阱,不应该已被否决。 非常违反直觉,OrderedDict 必须从元组列表中初始化/分配,而不是从字典中,以保持正确的顺序:)

标签: python dictionary ordereddictionary


【解决方案1】:

通过将项目放入(无序)dict 并从中构造 OrderedDict,您已经丢弃了原始订单。从元组列表构造 OrderedDict,而不是字典。

【讨论】:

    【解决方案2】:

    请在下面找到代码sn-p

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 2014-07-20
      • 2013-03-21
      • 2017-09-04
      • 2014-01-21
      • 2016-11-08
      • 2018-02-16
      相关资源
      最近更新 更多