如何用Python从下载的有向Multigraph生成带权(权重为length)邻接表?
解决NetworkX有向多重图生成带length权重的邻接表问题
你需要的是**有向多重图(MultiDiGraph)**的邻接表,格式为节点映射到包含(邻居节点, length数值)元组的列表。之前用nx.to_dict_of_dicts没得到正确结果,是因为这个函数对多重图返回的结构是嵌套字典({u: {v: {edge_key: length}}}),和你要的列表格式不匹配。
正确实现方法
直接遍历图的节点和出边,手动构建目标格式的邻接表:
import networkx as nx # 假设G是你加载好的有向多重图 adjacency_list = {} for node in G.nodes(): adjacency_list[node] = [] # 遍历当前节点的所有出边,获取目标节点和边的length属性 for neighbor, edge_data in G.out_edges(node, data=True): # 取出length值,若边无该属性可设置默认值(这里设为0) length = edge_data.get('length', 0) adjacency_list[node].append((neighbor, length))
简化写法(列表推导式)
如果能确保所有边都有length属性,可以用更简洁的推导式:
adjacency_list = { node: [(neighbor, edge_data['length']) for neighbor, edge_data in G.out_edges(node, data=True)] for node in G.nodes() }
验证示例
假设你的图结构如下:
G = nx.MultiDiGraph() G.add_edge('A', 'C', length=8) G.add_edge('B', 'A', length=5) G.add_edge('B', 'C', length=1) G.add_edge('C', 'B', length=12)
运行上述代码后,得到的adjacency_list完全符合你期望的格式:
{ 'A': [('C', 8)], 'B': [('A', 5), ('C', 1)], 'C': [('B', 12)] }
内容的提问来源于stack exchange,提问作者pythagoreansnail
相关产品推荐
相关产品推荐

