2017-03-15 56 views
4

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

dicts = OrderedDict() 
... 
for key, value in reversed(dicts.items()): 

上面的代码工作正常,当我使用PyCharm与Python 3.5.1,但是当我把它放在codefights,使用他们的Python 3的解释(不知道确切的版本),我得到下面的错误for loop implementation:

TypeError: argument to reversed() must be a sequence 

为什么这个错误发生,我该如何解决它?

+0

我相信'dicts.items()'必须被铸造成一个列表甚至是一个元组。 –

回答

9

根据the docs,OrderedDict.items()只支持reversed从3.5,所以我希望它是一个旧版本。你可以解决它

一种方法是转换到一个列表第一:

for key, value in reversed(list(dicts.items())): 
    ... 

NB:根据意见,dicts.items()应该是内存使用效率,但list(dicts.items())肯定会创建一个长度数量的新名单的项目在dicts。大多数时候这应该没问题,但是对于非常大的dicts,这会看到O(N)的内存使用率可能很大。

+0

什么是最好的方式使其在旧版本上工作? – user1179317

+1

'list'转换的内存效率比'dicts.items()'调用少吗?这不像'dicts.items()'是一个发电机 –

+0

好点,我不知道,我会抓那个。 – daphtdazz