Networkx MultiDiGraph inheritance: add_weighed_edges_from KeyError: None
Networkx MultiDiGraph inheritance: add_weighed_edges_from KeyError: None
我尝试使用 MultiDiGraph 制作 PERT 图。因此,我尝试放置一个 bool 变量“_dirty”来检查图形是否变形。但是,add_weighted_edges_from 函数无法正常工作。代码有错吗?任何帮助将不胜感激。
class ClassName(nx.MultiDiGraph):
# some code..
def add_edge(self, *args, **kwargs):
""" add one edge """
self._dirty = True
super().add_edge(*args, **kwargs)
def add_edges_from(self, *args, **kwargs):
""" add several edges """
self._dirty = True
super().add_edges_from(*args, **kwargs)
def add_weighted_edges_from(self, *args, **kwargs):
""" add several weighted edges """
self._dirty = True
super().add_weighted_edges_from(*args, **kwargs)
g = ClassName()
g.add_weighted_edges_from([(1,2,5),(2,3,10)])
我得到的错误:
KeyError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_15100/3885668308.py in <module>
----> 1 g.add_weighted_edges_from([(1,2,5),(2,3,10)])
~\AppData\Local\Temp/ipykernel_15100/2908507458.py in add_weighted_edges_from(self, *args, **kwargs)
32 """ add several weighted edges """
33 self._dirty = True
---> 34 super().add_weighted_edges_from(*args, **kwargs)
35
36 def remove_node(self, *args, **kwargs):
~\anaconda3\envs\pytorch_env\lib\site-packages\networkx\classes\graph.py in add_weighted_edges_from(self, ebunch_to_add, weight, **attr)
986 >>> G.add_weighted_edges_from([(0, 1, 3.0), (1, 2, 7.5)])
987
--> 988 self.add_edges_from(((u, v, {weight: d}) for u, v, d in ebunch_to_add), **attr)
989
990 def remove_edge(self, u, v):
~\AppData\Local\Temp/ipykernel_15100/2908507458.py in add_edges_from(self, *args, **kwargs)
27 """ add several edges """
28 self._dirty = True
---> 29 super().add_edges_from(*args, **kwargs)
30
31 def add_weighted_edges_from(self, *args, **kwargs):
~\anaconda3\envs\pytorch_env\lib\site-packages\networkx\classes\multigraph.py in add_edges_from(self, ebunch_to_add, **attr)
571 key = dd # ne == 3 with 3rd value not dict, must be a key
572 key = self.add_edge(u, v, key)
--> 573 self[u][v][key].update(ddd)
574 keylist.append(key)
575 return keylist
~\anaconda3\envs\pytorch_env\lib\site-packages\networkx\classes\coreviews.py in __getitem__(self, key)
52
53 def __getitem__(self, key):
---> 54 return self._atlas[key]
55
56 def copy(self):
KeyError: None
您错过了 add_edge
returns key
Multi(Di)Graph
。添加 return
可解决您的问题:
class RailwayGraph(nx.MultiDiGraph):
# some code..
def add_edge(self, *args, **kwargs):
""" add one edge """
self._dirty = True
return super().add_edge(*args, **kwargs)
def add_edges_from(self, *args, **kwargs):
""" add several edges """
self._dirty = True
super().add_edges_from(*args, **kwargs)
def add_weighted_edges_from(self, *args, **kwargs):
""" add several weighted edges """
self._dirty = True
super().add_weighted_edges_from(*args, **kwargs)
rg = RailwayGraph()
rg.add_weighted_edges_from([(1, 2, 5), (2, 3, 10)])
我尝试使用 MultiDiGraph 制作 PERT 图。因此,我尝试放置一个 bool 变量“_dirty”来检查图形是否变形。但是,add_weighted_edges_from 函数无法正常工作。代码有错吗?任何帮助将不胜感激。
class ClassName(nx.MultiDiGraph):
# some code..
def add_edge(self, *args, **kwargs):
""" add one edge """
self._dirty = True
super().add_edge(*args, **kwargs)
def add_edges_from(self, *args, **kwargs):
""" add several edges """
self._dirty = True
super().add_edges_from(*args, **kwargs)
def add_weighted_edges_from(self, *args, **kwargs):
""" add several weighted edges """
self._dirty = True
super().add_weighted_edges_from(*args, **kwargs)
g = ClassName()
g.add_weighted_edges_from([(1,2,5),(2,3,10)])
我得到的错误:
KeyError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_15100/3885668308.py in <module>
----> 1 g.add_weighted_edges_from([(1,2,5),(2,3,10)])
~\AppData\Local\Temp/ipykernel_15100/2908507458.py in add_weighted_edges_from(self, *args, **kwargs)
32 """ add several weighted edges """
33 self._dirty = True
---> 34 super().add_weighted_edges_from(*args, **kwargs)
35
36 def remove_node(self, *args, **kwargs):
~\anaconda3\envs\pytorch_env\lib\site-packages\networkx\classes\graph.py in add_weighted_edges_from(self, ebunch_to_add, weight, **attr)
986 >>> G.add_weighted_edges_from([(0, 1, 3.0), (1, 2, 7.5)])
987
--> 988 self.add_edges_from(((u, v, {weight: d}) for u, v, d in ebunch_to_add), **attr)
989
990 def remove_edge(self, u, v):
~\AppData\Local\Temp/ipykernel_15100/2908507458.py in add_edges_from(self, *args, **kwargs)
27 """ add several edges """
28 self._dirty = True
---> 29 super().add_edges_from(*args, **kwargs)
30
31 def add_weighted_edges_from(self, *args, **kwargs):
~\anaconda3\envs\pytorch_env\lib\site-packages\networkx\classes\multigraph.py in add_edges_from(self, ebunch_to_add, **attr)
571 key = dd # ne == 3 with 3rd value not dict, must be a key
572 key = self.add_edge(u, v, key)
--> 573 self[u][v][key].update(ddd)
574 keylist.append(key)
575 return keylist
~\anaconda3\envs\pytorch_env\lib\site-packages\networkx\classes\coreviews.py in __getitem__(self, key)
52
53 def __getitem__(self, key):
---> 54 return self._atlas[key]
55
56 def copy(self):
KeyError: None
您错过了 add_edge
returns key
Multi(Di)Graph
。添加 return
可解决您的问题:
class RailwayGraph(nx.MultiDiGraph):
# some code..
def add_edge(self, *args, **kwargs):
""" add one edge """
self._dirty = True
return super().add_edge(*args, **kwargs)
def add_edges_from(self, *args, **kwargs):
""" add several edges """
self._dirty = True
super().add_edges_from(*args, **kwargs)
def add_weighted_edges_from(self, *args, **kwargs):
""" add several weighted edges """
self._dirty = True
super().add_weighted_edges_from(*args, **kwargs)
rg = RailwayGraph()
rg.add_weighted_edges_from([(1, 2, 5), (2, 3, 10)])