6

我已经看到(并编写了)许多这样的实现。是否有一个被认为是最好的或正在成为标准的?

我所说的有序 dict 的意思是对象具有其中键的顺序的一些概念,类似于 PHP 中的数组。

来自PEP 372的odict似乎是一个强有力的候选人,但并不完全清楚它是赢家。

4

4 回答 4

12

Raymond Hettinger 的这个是 collections.OrderedDict 的替代品,它将出现在 Python 2.7 中:http: //pypi.python.org/pypi/ordereddict

集合文档的开发版本说它相当于 Python 2.7 中的版本,因此它很可能会平稳过渡到 Python 附带的版本。

我已经把它放在 PyPI 中,所以你可以用 安装它easy_install ordereddict,然后像这样使用它:

from ordereddict import OrderedDict
d = OrderedDict([("one", 1), ("two", 2)])
于 2010-01-08T21:37:05.707 回答
8

我还没有看到标准;每个人似乎都自己动手(请参阅此问题的答案)。如果您可以使用 PEP 372 中的OrderedDict 补丁,那是您最好的选择。stdlib 中包含的任何内容很有可能在一两年后成为每个人都使用的东西。

于 2009-04-05T21:56:17.853 回答
2

collections.OrderedDict现在应该可以广泛使用,但如果考虑性能,您可以考虑使用我的包cyordereddict作为替代方案。它是标准库的 OrderedDict 到 Cython 的直接端口,速度提高了 2-6 倍。

于 2014-11-19T01:26:23.847 回答
1

Python 2.7 及更高版本的模块中有 OrderedDict collections,因此您应该将其视为“标准”。如果它的功能足够,您可能应该使用它。

然而,它的实现方法是极简的,如果这还不够,你应该看看Foord /Larossa 的 odict 或ordereddict(我的),因为在这种情况下它们更合适。两种实现都是collections.OrderedDict. 两者的区别在于,odict纯粹的 python 和ordereddict一个更快的C扩展模块。

即使它提供了您需要的所有功能,简约的方法也不一定更好:例如,当返回嵌套在它自己的值中的一个时collections.OrderedDict,最初确实有一个错误。一个可以更早发现的错误,有一个子集,即 OrderedDict 可以处理的小子集,使用了较旧的单元测试。repr()OrderedDictordereddict

于 2013-04-01T12:56:31.537 回答