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

使用NetworkX从CSV构建图时报错及边数量异常问题求助

错误原因
  1. 初始版本中,starting_station、ending_station、average_time_taken都是存储了全表对应列所有值的列表,直接将整个列表作为节点传入add_edge方法,而列表属于可变不可哈希类型,因此触发unhashable type: 'list'报错。
  2. 后续修改版本将列表替换为生成器表达式,但仍然将整个生成器对象作为节点传入,生成器本身是独立的Python对象,相当于全程只添加了两个节点(两个生成器实例)和一条边,无法得到完整的图。
正确实现代码

无需重复四次读取文件,单次逐行遍历CSV,每一行对应一条边,直接提取当前行的字段添加边即可:

import networkx as nx
import csv
import matplotlib.pyplot as plt

graph = nx.Graph()
filename = "tubedata.csv"

with open(filename, 'r', encoding='utf-8') as tube_data:
    reader = csv.reader(tube_data, delimiter=',')
    # 如果CSV文件第一行是表头,取消注释下一行跳过表头
    # next(reader)
    for row in reader:
        start_station = row[0]
        end_station = row[1]
        # 将耗时转换为数值类型,避免后续权重计算出错
        take_time = float(row[3])
        graph.add_edge(start_station, end_station, weight=take_time)
补充说明

如果后续需要基于权重做路径计算,可直接调用networkx内置的最短路径相关方法,权重参数指定为weight='weight'即可。

内容的提问来源于stack exchange,提问作者Mughees Asif

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:36:05