You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:05:12