如何从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.
相关产品推荐
相关产品推荐

