首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python OrderedDict不保持元素顺序

Python OrderedDict不保持元素顺序
EN

Stack Overflow用户
提问于 2013-04-01 03:25:51
回答 1查看 25K关注 0票数 50

我正在尝试创建一个OrderedDict对象,但我刚创建它,元素就变得杂乱无章。

这就是我要做的:

代码语言:javascript
复制
from collections import OrderedDict
od = OrderedDict({(0,0):[2],(0,1):[1,9],(0,2):[1,5,9]})

元素不会按我指定的顺序排列

代码语言:javascript
复制
od
OrderedDict([((0, 1), [1, 9]), ((0, 0), [2]), ((0, 2), [1, 5, 9])])

docs.python.org没有一个例子,我不明白为什么顺序变得混乱。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-01 03:27:29

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

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

代码语言:javascript
复制
>>> 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构建一个。

票数 92
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15733558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档