获取'dict_keys'对象不支持索引,尽管转换为列表

2024-09-24 22:31:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Python3,尽管强制列表,但似乎无法运行我的程序。

这是函数调用:

path = euleriancycle(edges)

这就是我使用keys方法的地方:

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

我试着运行它,没有类型转换列表,得到了这个错误。在翻阅了这个网站和类似的查询之后,我遵循了建议的解决方案,并键入cast to list,但没有结果。我也犯了同样的错误。

这是错误轨迹:

---------------------------------------------------------------------------
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

Tags: pathin列表inputdef错误ipythonkeys
2条回答

您正在尝试索引dict_keys对象,然后将该元素转换为列表(除了list[...]vslist(...)的语法错误)。您需要先将整个对象转换为列表,然后索引它。

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

list接受任何iterable,字典返回的迭代器只是键上的迭代器,因此不需要显式调用keys

currentnode = list(e)[0]

不能为dict_keys对象(如集合)编制索引。

而不是这个:

list[e.keys()[0]]

接下来最接近的是:

list(e)[0]

Python无法保证dict中的哪个键将被返回,因此您可能希望自己对其进行排序。

相关问题 更多 >