2016-08-17 1 views
0

Я использую Python 3 и, несмотря на листинг в список, я не могу запустить свою программу.Объект 'dict_keys' не поддерживает индексирование, несмотря на то, что он был внесен в список

Это функция вызова:

path = euleriancycle(edges) 

И это где я использовал метод ключей:

def euleriancycle(e): 
    currentnode = list[e.keys()[0]] 
    path = [currentnode] 

Я попытался запустить его без типа литья в список и получил эту ошибку , После рывка об этом сайте и подобных запросах я следил за предлагаемыми решениями и списком типов, но безрезультатно. У меня такая же ошибка.

Это след ошибка:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-56-356b905111a9> in <module>() 
    45    edges[int(edge[0])] = [int(edge[1])] 
    46 
---> 47 path = euleriancycle(edges) 
    48 print(path) 

<ipython-input-56-356b905111a9> in euleriancycle(e) 
     1 def euleriancycle(e): 
----> 2  currentnode = list[e.keys()[0]] 
     3  path = [currentnode] 
     4 
     5  while true: 

TypeError: 'dict_keys' object does not support indexing 
+1

'список (e.keys()) [0]' работает, но 'следующий (ИТЭР (е))', вероятно, лучше – vaultah

+3

Вы * не * отлитые 'e.keys()' к перед индексированием. Вы пытались передать * результат * из файла 'e.keys() [0]' в список (хотя и с синтаксисом неудачной индексации, это 'list (...)', а не 'list [...]'); вы, вероятно, хотели использовать 'list (e.keys()) [0]' (обратите внимание на круглые скобки!), но это всего лишь верный способ написания «list (e) [0]». –

ответ

6

В dict_keys объекты, как наборы, не могут быть проиндексированы.

Вместо этого:

list[e.keys()[0]] 

Следующая ближе всего было бы это:

list(e)[0] 

Python не дает никаких гарантий на то, что ключ от Dict будет возвращено, так что вы можете поставить заказ на него сам.

+0

Если порядок ключей значителен, используйте команду 'collections.OrderedDict'. –

2

Вы пытаетесь индексировать dict_keys объект, затем преобразовать этот элемент в (ошибка синтаксиса list[...] против list(...) в сторону) список. Сначала вам нужно преобразовать весь объект в список, , затем индексируйте его.

currentnode = list[e.keys()[0]] # Wrong 
currentnode = list(e.keys()[0]) # Less wrong, but still wrong 
currentnode = list(e.keys())[0] # Right 

list принимает любую итерацию, и итератор, возвращаемый словарь просто итератор над своими ключами, так что вам не нужно вызывать keys явно.

currentnode = list(e)[0] 

 Смежные вопросы

  • Нет связанных вопросов^_^