从不可变子图视图创建可变有向图时遇节点修改报错
解决NetworkX中'AtlasView'对象无法赋值的问题
错误原因
你通过new_graph['my_node']访问节点邻接关系时,得到的是AtlasView类型对象——这是NetworkX的只读视图,用来避免原图数据被误改,所以不允许直接通过下标赋值修改边属性,才触发了TypeError。
正确修改边属性的三种方法
方法1:用set_edge_attributes()设置属性
不管是单个还是批量边属性,都可以用这个官方方法:
# 替换'target_node'为'my_node'的实际邻接节点 nx.set_edge_attributes(new_graph, {('my_node', 'target_node'): {'weight': 25}})
方法2:用add_edge()更新已有边属性
如果这条边已经存在,add_edge()会直接覆盖原有属性:
new_graph.add_edge('my_node', 'target_node', weight=25)
方法3:通过edges字典直接修改
直接访问new_graph.edges里的可修改属性字典:
new_graph.edges['my_node', 'target_node']['weight'] = 25
子图创建简化技巧
你原来生成子图的步骤可以简化,不用先创建视图再复制,直接用subgraph()生成:
new_graph = nx.DiGraph(G.subgraph(my_nodes))
内容的提问来源于stack exchange,提问作者wolfrevo
相关产品推荐
相关产品推荐

