如何*懒惰*迭代OrderedDict中键的反向顺序?

Yuv*_*mon 2 python dictionary ordereddictionary

我想以OrderedDict相反的顺序迭代.

即颠倒顺序:

for k, v in my_ordered_dict.iteritems():
   # < do stuff >
Run Code Online (Sandbox Code Playgroud)

到目前为止,通过反转列表,我得到了一个非懒惰的版本:

for k, v in list(my_ordered_dict.iteritems())[::-1]:
   # < do stuff >
Run Code Online (Sandbox Code Playgroud)

任何想法如何使它更好?

Ste*_*uch 6

如果你reversed在dict上使用它应该懒惰地评估:

for k, v in ((k, my_ordered_dict[k]) for k in reversed(my_ordered_dict)):
    .....
Run Code Online (Sandbox Code Playgroud)

这是如何运作的?

这里的关键元素是生成器表达式,它是懒惰地计算的.因此,这将懒惰地评估有序字典的键,然后在需要时返回tuple键和dict值.

我只需要支持python 3:

在python 3中,dict.items()现在是一个视图,并被懒惰地评估.因此,上述内容可以简化为:

for k, v in reversed(my_ordered_dict.items()):
Run Code Online (Sandbox Code Playgroud)

虽然Python 2.7确实有一个viewitems()方法,但Python 2.7 OrderedDict视图不支持需要反转非序列的__reversed__钩子reversed.