This question already has answers here:
Converting dict to OrderedDict

(5个答案)


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没有示例,我无法弄清楚订单为何变得困惑。任何帮助是极大的赞赏。

最佳答案

您的问题是,您正在构造dict以将初始数据提供给o​​jit_code-该OrderedDict不存储任何订单,因此该订单在到达dict之前就丢失了。

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

>>> 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])])

值得注意的是,这就是tuple使用其字符串表示形式的语法的原因-字符串表示形式应尽可能使用有效的Python代码来重现对象,这就是为什么输出使用元组列表而不是dict的原因。

编辑:As of Python 3.6, OrderedDict is ordered,因此,如果您使用的是最新的Python版本,则可以改用关键字参数。

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

关于python - Python OrderedDict不保持元素顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15733558/

10-09 16:45
查看更多