您好我正在处理ProjectEuler问题82,并在添加边缘时遇到KeyError。奇怪的是,KeyError几乎每次都引用不同的dict_values。这是代码......
import networkx as nx
with open("p082_matrix.txt") as key_file:
entries = key_file.readlines()
def split_and_cast(line_of_nums):
nums = line_of_nums.split(",")
return [int(x) for x in nums]
matrix_list = [split_and_cast(row) for row in entries]
for i in matrix_list:
print(i)
class Point:
"""A two dimensional point object"""
def __init__(self, x, y):
self.x = x
self.y = y
def __eq__(self, other):
return self.x == other.x and self.y == other.y
def __hash__(self):
return hash(self.__dict__.values())
def __repr__(self):
return str(self.__dict__.values())
graph = nx.Graph()
for i in range(82):
for j in range(82):
graph.add_node(Point(i, j))
for i in range(81):
for j in range(80):
point = Point(i, j)
try:
upper_value = matrix_list[i-1][j]
graph.add_edge(point, Point(i-1, j), weight=upper_value)
except IndexError:
pass
try:
right_value = matrix_list[i][j+1]
graph.add_edge(point, Point(i, j+1), weight=right_value)
except IndexError:
pass
try:
lower_value = matrix_list[i+1][j]
graph.add_edge(point, Point(i+1, j), weight=lower_value)
except IndexError:
pass
以下是错误代码示例...
Traceback (most recent call last):
File "C:/Users/Name/PycharmProjects/ProjectEuler/PE82.py", line 50, in <module>
graph.add_edge(point, Point(i, j+1), weight=right_value)
File "C:\Users\Name\AppData\Local\Programs\Python\Python35-32\lib\site- packages\networkx-1.11-py3.5.egg\networkx\classes\graph.py", line 798, in add_edge
datadict = self.adj[u].get(v, self.edge_attr_dict_factory())
KeyError: dict_values([60, 4])
第二个错误代码
Traceback (most recent call last):
File "C:/Users/Name/PycharmProjects/ProjectEuler/PE82.py", line 44, in <module>
graph.add_edge(point, Point(i-1, j), weight=upper_value)
File "C:\Users\Name\AppData\Local\Programs\Python\Python35-32\lib\site- packages\networkx-1.11-py3.5.egg\networkx\classes\graph.py", line 800, in add_edge
self.adj[u][v] = datadict
KeyError: dict_values([14, 8])
另一个......
Traceback (most recent call last):
File "C:/Users/Name/PycharmProjects/ProjectEuler/PE82.py", line 50, in <module>
graph.add_edge(point, Point(i, j+1), weight=right_value)
File "C:\Users\Name\AppData\Local\Programs\Python\Python35-32\lib\site-packages\networkx-1.11-py3.5.egg\networkx\classes\graph.py", line 798, in add_edge
datadict = self.adj[u].get(v, self.edge_attr_dict_factory())
KeyError: dict_values([5, 76])
fyi我来自Java背景。如果答案可以与Java中的某些内容相关,那将会很有帮助。