我试图创建一个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
-本dict
不存储任何命令,所以它到达之前的订单丢失OrderedDict
。
该解决方案是从有序的数据类型来构建-最简单的是一个list
的tuple
S:
>>> 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代码重现的对象,其中可能的,这就是为什么输出使用元组,而不是一个字典的列表。
编辑: 对于Python 3.6, kwargs
是有序的 ,所以你可以使用关键字参数代替,只要你是一个向上的最新Python版本。
作为3.7 ,这也是真正的dict
秒(这是对CPython的3.6,但语言规范没有明确说明,所以使用OrderedDict
仍然需要兼容性)。 这意味着,如果你可以假设一个3.7+环境中,你可以经常滴OrderedDict
完全,或构建一个从一个普通dict
,如果你需要一个特定的功能(例如:以平等关系)。