我正在尝试创建一个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没有一个例子,我不明白为什么顺序变得混乱。任何帮助都是非常感谢的。
发布于 2013-04-01 03:27:29
您的问题是,您正在构造一个dict
来向OrderedDict
提供初始数据-此dict
不存储任何订单,因此订单在到达OrderedDict
之前就丢失了。
解决方案是从有序数据类型构建-最简单的是tuple
的list
:
>>> 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,因此,如果您使用的是最新的As of Python 3.6, kwargs
is ordered版本,则可以使用关键字参数。
As of 3.7,这对于dict
也是如此(它是在3.6版本的CPython中使用的,但是语言规范没有规定,所以为了兼容性,仍然需要使用OrderedDict
)。这意味着如果你可以假设一个3.7+环境,你通常可以完全放弃OrderedDict
,或者如果你需要一个特定的特性(例如:为了平等而排序),你可以从一个常规的dict
构建一个。
https://stackoverflow.com/questions/15733558
复制相似问题