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

如何从node: {neighbor: weight}格式字典构建NetworkX图对象

将节点-邻居-权重字典转换为NetworkX图对象

我有如下包含节点-邻居-权重对的字典:

graph = {
    "A": {"B": 3, "C": 3},
    "B": {"A": 3, "D": 3.5, "E": 2.8},
    "C": {"A": 3, "E": 2.8, "F": 3.5},
    "D": {"B": 3.5, "E": 3.1, "G": 10},
    "E": {"B": 2.8, "C": 2.8, "D": 3.1, "G": 7},
    "F": {"G": 2.5, "C": 3.5},
    "G": {"F": 2.5, "E": 7, "D": 10},
}

该图的可视化效果如下:
图可视化

请问如何将此字典转换为NetworkX图对象?现有代码框架如下:

import networkx as nx

G = nx.Graph()

# 请补充实现代码 #

实现方案

有两种简洁的方式可以完成转换,以下是具体实现:

方式一:手动遍历添加节点与边

适合需要自定义处理逻辑的场景,同时避免无向图中重复添加边:

import networkx as nx

G = nx.Graph()

# 批量添加所有节点
G.add_nodes_from(graph.keys())

# 遍历节点与邻居关系,添加带权重的边
for node, neighbors in graph.items():
    for neighbor, weight in neighbors.items():
        # 检查边是否已存在,避免重复添加
        if not G.has_edge(node, neighbor):
            G.add_edge(node, neighbor, weight=weight)

方式二:使用NetworkX内置方法

直接利用NetworkX提供的工具函数,一步完成图的构建:

import networkx as nx

# 从嵌套字典直接生成无向图,自动识别节点与边权重
G = nx.from_dict_of_dicts(graph, create_using=nx.Graph())

验证方法

可以通过以下代码查看所有边的权重,确认转换结果是否正确:

# 输出所有边及其权重
for u, v, edge_data in G.edges(data=True):
    print(f"边 {u}-{v} 的权重: {edge_data['weight']}")

内容的提问来源于stack exchange,提问作者Bex T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:23:19