gpt4 book ai didi

python - 如何更正错误 ' AttributeError: ' dict_keys' object has no attribute 'remove' '?

转载 作者:太空狗 更新时间:2023-10-29 19:37:12 30 4
gpt4 key购买 nike

我正在尝试使用 dijkstra 算法进行最短路径查找,但它似乎不起作用。无法弄清楚问题是什么。这是代码和错误消息。(我正在使用 Python 3.5。https://www.youtube.com/watch?v=LHCVNtxb4ss)

graph = {
'A': {'B': 10, 'D': 4, 'F': 10},
'B': {'E': 5, 'J': 10, 'I': 17},
'C': {'A': 4, 'D': 10, 'E': 16},
'D': {'F': 12, 'G': 21},
'E': {'G': 4},
'F': {'E': 3},
'G': {'J': 3},
'H': {'G': 3, 'J': 3},
'I': {},
'J': {'I': 8},
}

def dijkstra(graph, start, end):
D = {}
P = {}
for node in graph.keys():
D[node]= -1
P[node]=""
D[start]=0
unseen_nodes=graph.keys()
while len(unseen_nodes) > 0:
shortest=None
node=' '
for temp_node in unseen_nodes:
if shortest==None:
shortest = D[temp_node]
node = temp_node
elif D[temp_node]<shortest:
shortest=D[temp_node]
node=temp_node
unseen_nodes.remove(node)
for child_node, child_value in graph[node].items():
if D[child_node] < D[node] + child_value:
D[child_node] = D[node] + child_value
P[child_node]=node
path = []
node = end
while not (node==start):
if path.count(node)==0:
path.insert(0, node)
node=P[node]
else:
break
path.insert(0, start)
return path

AttributeError: 'dict_keys' 对象没有属性 'remove'

最佳答案

在 Python 3 中,dict.keys()返回 a dict_keys object (a view of the dictionary)没有 remove 方法;不像 Python 2,其中 dict.keys() 返回一个列表对象。

>>> graph = {'a': []}
>>> keys = graph.keys()
>>> keys
dict_keys(['a'])
>>> keys.remove('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'dict_keys' object has no attribute 'remove'

您可以使用 list(..) 获取键列表:

>>> keys = list(graph)
>>> keys
['a']
>>> keys.remove('a')
>>> keys
[]

unseen_nodes = graph.keys()

unseen_nodes = list(graph)

关于python - 如何更正错误 ' AttributeError: ' dict_keys' object has no attribute 'remove' '?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44570561/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com