【发布时间】:2013-12-11 09:19:32
【问题描述】:
orderedDict.values()、.keys()、.iterkeys() 等是否按照第一次插入项目的顺序返回值?
我假设 values\keys 函数不会改变字典的顺序,如果是orderedDict,那么我会按照它们添加到字典中的顺序获取值。
这是真的吗?
【问题讨论】:
标签: python dictionary ordereddictionary
orderedDict.values()、.keys()、.iterkeys() 等是否按照第一次插入项目的顺序返回值?
我假设 values\keys 函数不会改变字典的顺序,如果是orderedDict,那么我会按照它们添加到字典中的顺序获取值。
这是真的吗?
【问题讨论】:
标签: python dictionary ordereddictionary
orderedDict.values()、.keys()、.iterkeys() 等是否按照第一次插入项目的顺序返回值?
是的,它们被保留了下来。从文档(强调我的):
OrderedDict 对象之间的相等性测试是顺序敏感的,并且是 实现为 list(od1.items())==list(od2.items())。
这就是相等比较的完成方式,这意味着items()的结果是有序的。现在对于其他两个函数,您可以查看substitute implementation for OrderedDict here
【讨论】:
你的假设是正确的。 OrderedDict 维护一个(按顺序排列的)键列表以迭代值和键,因此它们将始终按照与 for 循环中相同的方式排序。
source code 中的 cmets 也声明了这一点,说:
继承的dict提供
__getitem__、__len__、__contains__和get。 其余方法是顺序感知的。所有方法的 Big-O 运行时间与常规字典相同。
强调我的。
【讨论】: