2017-03-15 35 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