小编典典

Python OrderedDict不保持元素顺序

python

我正在尝试创建一个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没有示例,我无法弄清楚订单为何变得混乱。任何帮助是极大的赞赏。


阅读 260

收藏
2020-12-20

共1个答案

小编典典

您的问题是,您正在构造一个dict将初始数据提供给的OrderedDict-这dict 不会
存储任何订单,因此订单在到达之前就丢失了OrderedDict

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

>>> 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代码来重现对象,这就是为什么输出使用元组列表而不是dict的原因。

编辑:从Python
3.6开始,kwargs是ordered
,因此,如果您使用的是最新的Python版本可以改用关键字参数。

从3.7开始,对于dicts也是如此(在3.6中的CPython中也是如此,但是语言规范未指定它,因此OrderedDict仍然需要使用来实现兼容性)。这意味着,如果您可以假设一个3.7+的环境,则通常可以OrderedDict完全放弃,或者dict如果需要特定功能(例如:为了平等而定),可以从常规构造一个。

2020-12-20