如何遍历Networkx有向图节点'a'获取指定格式的边属性列表
处理NetworkX有向图中节点'a'的边属性遍历需求
这里有个直观的方法来实现你想要的结果——我们只需要分开处理节点'a'的出边和入边,再把结果合并就行:
步骤说明
- 先提取节点'a'所有出边的
attr属性值,直接保留正值 - 再提取节点'a'所有入边的
attr属性值,给每个值加上负号 - 把这两部分结果拼接成一个列表,就是你要的格式
完整代码示例
import networkx as nx # 初始化你定义的有向图 G = nx.DiGraph() G.add_edge('a', 'b', attr=0.6) G.add_edge('a', 'c', attr=0.2) G.add_edge('d', 'a', attr=0.3) # 提取出边的attr值 outgoing_attrs = [edge_data['attr'] for _, _, edge_data in G.out_edges('a', data=True)] # 提取入边的attr值并取负 incoming_attrs = [-edge_data['attr'] for _, _, edge_data in G.in_edges('a', data=True)] # 合并得到最终列表 result_list = outgoing_attrs + incoming_attrs print(result_list) # 输出:[0.6, 0.2, -0.3]
关键细节解释
G.out_edges('a', data=True):NetworkX的这个方法会返回节点'a'的所有出边,data=True参数会让结果包含每条边的属性字典G.in_edges('a', data=True):对应地,这个方法返回节点'a'的所有入边,同样带上属性数据- 用列表推导式可以快速遍历边数据,分别处理出边和入边的属性值,最后拼接就得到了符合要求的结果
如果想要更紧凑的写法,也可以把合并步骤写成一行:
result_list = [d['attr'] for _, _, d in G.out_edges('a', data=True)] + [-d['attr'] for _, _, d in G.in_edges('a', data=True)]
内容的提问来源于stack exchange,提问作者softProcess
相关产品推荐
相关产品推荐

