反转的OrderedDict TypeError

use*_*317 4 python reverse dictionary python-3.x

我有一个有序的字典,我试图以相反的顺序通过它,基本上从插入的最后一个(键,值)开始.

dicts = OrderedDict()
...
for key, value in reversed(dicts.items()):
Run Code Online (Sandbox Code Playgroud)

当我在Python 3.5.1中使用PyCharm时,上面的代码工作正常,但是当我将它放在codefights上时,使用他们的Python 3解释器(不知道确切的版本),我得到for循环实现的下面的错误:

TypeError: argument to reversed() must be a sequence
Run Code Online (Sandbox Code Playgroud)

为什么会发生此错误,我该如何解决?

dap*_*azz 9

根据文档,OrderedDict.items()仅支持reversed3.5,所以我希望它是旧版本.

您可以解决的一种方法是首先转换为列表:

for key, value in reversed(list(dicts.items())):
     ...
Run Code Online (Sandbox Code Playgroud)

注意:根据评论,dicts.items()应该是内存效率,但list(dicts.items())肯定会创建一个长度为项目数的新列表dicts.大多数情况下,这应该没问题,但是对于非常大的情况,dicts这将会看到O(N)内存使用率可能会很高.

  • @Chris_Rands在python3中`dicts.items()`返回一个内存有效的[字典视图对象](https://docs.python.org/3.5/library/stdtypes.html#dictionary-view-objects).`list`ing它会在内存中创建一个项目的副本.另见:http://stackoverflow.com/a/8960727/3901060 (3认同)