计算图中节点距离时的关键错误
Key Error when computing node distances in graph
我一直收到这个关键错误,但我不明白这是怎么回事。我使用的是 for-in 语句,所以键肯定存在:
def floydWarshall(inFile):
graph = readGraph(inFile)
print(graph) # = {'0': {'1': 28, '3': 33}, '2': {'3': 50}, '1': {'4': 44, '2': 10}, '3': {'4': 30}, '4': 999999999}
nodes = graph.keys()
print(nodes) # = dict_keys(['0', '2', '1', '3', '4'])
distance = {}
for n in nodes:
distance[n] = {}
for k in nodes:
distance[n][k] = graph[n][k]
for k in nodes:
for i in nodes:
for j in nodes:
distance[i][j] = min (distance[i][j], distance[i][k] + distance[k][j])
printSolution(distance)
错误:
Traceback (most recent call last):
File "C:/Users/.../prob1.py", line 58, in floydWarshall
distance[n][k] = graph[n][k]
KeyError: '2'
关键错误只是在节点中最先出现的任何关键上,每次都改变
并非所有图形节点都与所有其他图形节点有边,因此使用 graph[n][k]
遍历整个图形上的所有节点 k
将导致 KeyError。
也许你想要这样的东西:
for n in nodes:
distance[n] = {}
for k in graph[n]:
distance[n][k] = graph[n][k]
或者,如果边不存在,如果您想将距离[n][k]设置为某个默认值:
for n in nodes:
distance[n] = {}
for k in nodes:
distance[n][k] = graph[n].get(k, default_value)
default_value
节点之间的距离通常设置为无穷大
这看起来像是我预期的行为。您的图形字典不是一个完整的矩阵。例如,graph[1] 不包含键 3.
当图 [n][m] 不包含从 n 到 m 的边时,您似乎想要一个默认的无穷大值。您可以通过显式检查或使用 defaultdict.
来做到这一点
我一直收到这个关键错误,但我不明白这是怎么回事。我使用的是 for-in 语句,所以键肯定存在:
def floydWarshall(inFile):
graph = readGraph(inFile)
print(graph) # = {'0': {'1': 28, '3': 33}, '2': {'3': 50}, '1': {'4': 44, '2': 10}, '3': {'4': 30}, '4': 999999999}
nodes = graph.keys()
print(nodes) # = dict_keys(['0', '2', '1', '3', '4'])
distance = {}
for n in nodes:
distance[n] = {}
for k in nodes:
distance[n][k] = graph[n][k]
for k in nodes:
for i in nodes:
for j in nodes:
distance[i][j] = min (distance[i][j], distance[i][k] + distance[k][j])
printSolution(distance)
错误:
Traceback (most recent call last):
File "C:/Users/.../prob1.py", line 58, in floydWarshall
distance[n][k] = graph[n][k]
KeyError: '2'
关键错误只是在节点中最先出现的任何关键上,每次都改变
并非所有图形节点都与所有其他图形节点有边,因此使用 graph[n][k]
遍历整个图形上的所有节点 k
将导致 KeyError。
也许你想要这样的东西:
for n in nodes:
distance[n] = {}
for k in graph[n]:
distance[n][k] = graph[n][k]
或者,如果边不存在,如果您想将距离[n][k]设置为某个默认值:
for n in nodes:
distance[n] = {}
for k in nodes:
distance[n][k] = graph[n].get(k, default_value)
default_value
节点之间的距离通常设置为无穷大
这看起来像是我预期的行为。您的图形字典不是一个完整的矩阵。例如,graph[1] 不包含键 3.
当图 [n][m] 不包含从 n 到 m 的边时,您似乎想要一个默认的无穷大值。您可以通过显式检查或使用 defaultdict.
来做到这一点