2014-11-01 50 views
2

我收到一個錯誤說「dict_key對象不支持索引」上:dict_key對象不支持索引的Python 3

return len(G[G.keys()[0]]) 

我意識到它曾經在Python 2.7.x工作,但不是在蟒蛇3.如何更改此聲明以使其在Python 3中工作。

回答

5

在Python 2.x中,G.keys()會返回一個列表,但Python 3.x會返回dict_keys對象。解決的辦法是用電話來包裝G.keys()list(),將其轉換成正確的類型:

return len(G[list(G.keys())[0]]) 
+0

當我嘗試這個聲明時,我得到了「列表中的索引」錯誤。 – user3258267 2014-11-01 20:59:30

+0

如果'G'是空的,會發生這種情況,但就我所知,Python 2.x中會發生同樣的情況。 – GoBusto 2014-11-01 21:09:54

+0

如果您有需要使用3.x運行的Python 2.x代碼,您可能需要查看命令['2to3'](https://docs.python.org/2/library/2to3 .html):它顯示了需要更改的內容以及代碼如何與Python 3.x兼容。該命令應該已經與您的Python發行版一起安裝。 – 2014-11-01 23:32:47

1

在Python 3,通過keysvalues返回的對象,並itemsdictionary view objects,不支持索引。

嘗試,而不是:

len(next(iter(G.values()))) 

這得到對於字典的值的字典視圖對象時,獲取其迭代,抓住從迭代器中的第一項(在字典中的第一值),並返回它的長度。

與創建鍵或值的新list的其他方法不同,無論字典的大小如何,它都需要大約相同的時間。

它適用於Python 2和Python 3(儘管爲了提高效率,您需要在Python 2上使用itervaluesviewvalues)。

+0

我收到一個名爲「Stop Iteration」的錯誤 – user3258267 2014-11-01 23:23:24

+0

@ user3258267如果'G'爲空,則會發生這種情況。如果你想默認爲'0',你可以使用'len(next(iter(dct.values()),[]))'' – agf 2014-11-01 23:32:52