Python的OrderedDict不守元素的顺序[复制](Python OrderedDict n

2019-08-18 10:05发布

这个问题已经在这里有一个答案:

  • 转换字典内OrderedDict 3个回答

我试图创建一个OrderedDict对象,但不早做我创建它,比元素都是混乱的。

这是我做的:

from collections import OrderedDict
od = OrderedDict({(0,0):[2],(0,1):[1,9],(0,2):[1,5,9]})

元素不留在我指定的顺序

od
OrderedDict([((0, 1), [1, 9]), ((0, 0), [2]), ((0, 2), [1, 5, 9])])

docs.python.org没有一个例子,我想不通为什么秩序是越来越混乱。 任何帮助是极大的赞赏。

Answer 1:

你的问题是,你正在构建一个dict给初始数据的OrderedDict -本dict 存储任何命令,所以它到达之前的订单丢失OrderedDict

该解决方案是从有序的数据类型来构建-最简单的是一个listtuple S:

>>> from collections import OrderedDict
>>> od = OrderedDict([((0, 0), [2]), ((0, 1), [1, 9]), ((0, 2), [1, 5, 9])])
>>> od
OrderedDict([((0, 0), [2]), ((0, 1), [1, 9]), ((0, 2), [1, 5, 9])])

值得一提的是,这是为什么OrderedDict使用它为它的字符串表示的语法-字符串表示应尽量有效的Python代码重现的对象,其中可能的,这就是为什么输出使用元组,而不是一个字典的列表。

编辑: 对于Python 3.6, kwargs是有序的 ,所以你可以使用关键字参数代替,只要你是一个向上的最新Python版本。

作为3.7 ,这也是真正的dict秒(这是对CPython的3.6,但语言规范没有明确说明,所以使用OrderedDict仍然需要兼容性)。 这意味着,如果你可以假设一个3.7+环境中,你可以经常滴OrderedDict完全,或构建一个从一个普通dict ,如果你需要一个特定的功能(例如:以平等关系)。



文章来源: Python OrderedDict not keeping element order [duplicate]