[英]Does ordered dict return keys in order too?
例如:
my_dict = OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
如果获取密钥的操作即my_dict.keys()
或my_dict.iterkeys()
完成,是否保证返回: ['apple','banana','orange','pear']
?
这在文档中没有明确提到。
是的,所有迭代都保证使用相同的顺序。
如果他们没有,那将是一个非常大的例外,必须明确记录。 该文档不包含此类例外。
您可以随时检查 实现,从模块文档的顶部明确链接。 您会注意到所有方法实现都直接或通过iter(self)
或list(self)
对self
使用迭代; 所有这些都由OrderedDict.__iter__
方法提供,该方法按顺序生成键:
def __iter__(self):
'od.__iter__() <==> iter(od)'
# Traverse the linked list in order.
root = self.__root
curr = root[1] # start at the first node
while curr is not root:
yield curr[2] # yield the curr[KEY]
curr = curr[1] # move to next node
例如, OrderedDict.values()
方法使用这些键映射到值:
def values(self):
'od.values() -> list of values in od'
return [self[key] for key in self]
是的, OrderedDict
将按顺序返回键。 然而,值得一提的是,键视图比较顺序不敏感,这有点令人惊讶。
这是__iter__
的 2.7参考 python 实现, .keys
和.iterkeys
方法都将委托给:
def __iter__(self):
'od.__iter__() <==> iter(od)'
# Traverse the linked list in order.
root = self.__root
curr = root[1] # start at the first node
while curr is not root:
yield curr[2] # yield the curr[KEY]
curr = curr[1] # move to next node
self.__root
只是这里的一个列表。
注意:实际实现是在 C 代码中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.