你的问题是你正在构建一个dict
将初始数据提供给OrderedDict
- this dict
doesn't存储任何订单,因此订单在到达之前就会丢失OrderedDict
.
解决方案是从有序数据类型构建 - 最简单的是list
of 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 代码,以便在可能的情况下重现对象,这就是输出使用元组列表而不是字典的原因。
Edit: 从 Python 3.6 开始,kwargs已订购 https://docs.python.org/3/whatsnew/3.6.html#pep-468-preserving-keyword-argument-order,因此您可以改用关键字参数,前提是您使用的是最新的 Python 版本。
自 3.7 起 https://docs.python.org/3.7/whatsnew/3.7.html,这也适用于dict
s (它是针对 3.6 中的 CPython,但语言规范没有指定它,所以使用OrderedDict
仍然需要兼容性)。这意味着如果您可以假设 3.7+ 环境,您通常可以放弃OrderedDict
完全,或者从常规构造一个dict
如果您需要特定功能(例如:顺序对平等至关重要)。