我已经看到(并编写了)许多这样的实现。是否有一个被认为是最好的或正在成为标准的?
我所说的有序 dict 的意思是对象具有其中键的顺序的一些概念,类似于 PHP 中的数组。
来自PEP 372的odict似乎是一个强有力的候选人,但并不完全清楚它是赢家。
我已经看到(并编写了)许多这样的实现。是否有一个被认为是最好的或正在成为标准的?
我所说的有序 dict 的意思是对象具有其中键的顺序的一些概念,类似于 PHP 中的数组。
来自PEP 372的odict似乎是一个强有力的候选人,但并不完全清楚它是赢家。
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)])
collections.OrderedDict
现在应该可以广泛使用,但如果考虑性能,您可以考虑使用我的包cyordereddict作为替代方案。它是标准库的 OrderedDict 到 Cython 的直接端口,速度提高了 2-6 倍。
Python 2.7 及更高版本的模块中有 OrderedDict collections
,因此您应该将其视为“标准”。如果它的功能足够,您可能应该使用它。
然而,它的实现方法是极简的,如果这还不够,你应该看看Foord /Larossa 的 odict 或ordereddict(我的),因为在这种情况下它们更合适。两种实现都是collections.OrderedDict
. 两者的区别在于,odict
纯粹的 python 和ordereddict
一个更快的C
扩展模块。
即使它提供了您需要的所有功能,简约的方法也不一定更好:例如,当返回嵌套在它自己的值中的一个时collections.OrderedDict
,最初确实有一个错误。一个可以更早发现的错误,有一个子集,即 OrderedDict 可以处理的小子集,使用了较旧的单元测试。repr()
OrderedDict
ordereddict