Python OrderedDict不保留元素ord

2024-06-28 14:58:56 发布

您现在位置: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没有示例,我不明白为什么订单变得混乱。任何帮助都非常感谢。


Tags: 对象fromorg订单import元素示例docs
1条回答
网友
1楼 · 发布于 2024-06-28 14:58:56

你的问题是你正在构造一个dict来给OrderedDict提供初始数据-这个dict不存储任何顺序,因此在到达OrderedDict之前,该顺序会丢失。

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

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

编辑:As of Python 3.6, ^{} is ordered,因此您可以改用关键字参数,前提是您使用的是最新的Python版本。

As of 3.7,这对于dicts也是如此(这是3.6中的CPython,但是语言规范没有指定它,所以为了兼容,仍然需要使用OrderedDict)。这意味着如果您可以假设一个3.7+的环境,那么如果您需要一个特定的特性(例如:顺序关系到相等性),您通常可以完全删除OrderedDict,或者从常规的dict构造一个。

相关问题 更多 >