Python OrderedDict 不保持元素顺序[重复]

2024-04-19

我正在尝试创建一个 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将初始数据提供给OrderedDict - this dict doesn't存储任何订单,因此订单在到达之前就会丢失OrderedDict.

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

>>> 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 代码,以便在可能的情况下重现对象,这就是输出使用元组列表而不是字典的原因。

Edit: 从 Python 3.6 开始,kwargs已订购 https://docs.python.org/3/whatsnew/3.6.html#pep-468-preserving-keyword-argument-order,因此您可以改用关键字参数,前提是您使用的是最新的 Python 版本。

自 3.7 起 https://docs.python.org/3.7/whatsnew/3.7.html,这也适用于dicts (它是针对 3.6 中的 CPython,但语言规范没有指定它,所以使用OrderedDict仍然需要兼容性)。这意味着如果您可以假设 3.7+ 环境,您通常可以放弃OrderedDict完全,或者从常规构造一个dict如果您需要特定功能(例如:顺序对平等至关重要)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python OrderedDict 不保持元素顺序[重复] 的相关文章

随机推荐