我正在尝试创建一个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。
dict
OrderedDict
解决方案是从有序数据类型构建-最简单的list是tuple的:
list
tuple
>>> 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的原因。
编辑:从Python 3.6开始,kwargs是ordered,因此,如果您使用的是最新的Python版本,则可以改用关键字参数。
kwargs
从3.7开始,对于dicts也是如此(在3.6中的CPython中也是如此,但是语言规范未指定它,因此OrderedDict仍然需要使用来实现兼容性)。这意味着,如果您可以假设一个3.7+的环境,则通常可以OrderedDict完全放弃,或者dict如果需要特定功能(例如:为了平等而定),可以从常规构造一个。