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

从pickled有向图加载数据生成numpy数组触发KeyError:0该如何解决

问题原因分析
  • 核心报错触发逻辑:你在列表推导式中使用了g[0],此处的g并不是嵌套了图对象的列表/元组,本身就是networkx的有向图实例。在networkx的规则中,对图对象使用[]运算符是查找对应ID的节点的邻接表,你读取的图中不存在ID为0的节点,因此直接抛出KeyError: 0。
  • 潜在的前置问题:你当前读取的pickle文件路径为GAWD/data/injected/rand_injected.pkl,和你前文写入的result/GAWD.pkl并不是同一个文件,需要先确认你读取的pkl文件中存储的数据结构是否符合你的预期。
排查和修复步骤
  1. 先确认目标pkl文件的存储结构,运行下面的代码打印结构信息:
import networkx as nx
with open("GAWD/data/injected/rand_injected.pkl", 'rb') as handle:
    loaded_data = pickle.load(handle)
    # 打印加载后的数据类型
    print(type(loaded_data))
    # 如果是列表,打印列表长度
    if isinstance(loaded_data, list):
        print(len(loaded_data))
        # 打印第一个元素的类型
        first_item = loaded_data[0]
        print(type(first_item))
        # 如果是networkx图,打印所有节点ID
        if isinstance(first_item, nx.Graph):
            print("图的节点ID列表:", list(first_item.nodes))
  1. 根据实际结构调整代码:
    • 如果加载的loaded_data本身就是图对象的列表,要把所有图存入numpy数组的话,直接去掉[0]即可:
    with open("GAWD/data/injected/rand_injected.pkl", 'rb') as handle:
        data = np.array(pickle.load(handle), dtype=object)
    
    • 如果pkl中存储的每个元素是(图对象, 标签/其他属性)的元组,确认元组的索引规则后再取值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:06:05