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

用NetworkX从GML文件提取super_technique节点label遇KeyError的解决方法

解决KeyError: 'label'并提取super_technique节点的label

问题原因

NetworkX读取GML文件时,可能存在属性解析异常(即使示例中所有节点都包含label),直接通过data['label']硬访问键会触发KeyError。同时直接访问data['types']也存在同样风险,需先确认属性存在性。

修正后的代码

import networkx as nx

# 加载GML文件
tree = nx.read_gml('Tactic_Technique_Reference_Example.gml')

technique_dict = {}
for node, data in tree.nodes(data=True):
    # 安全检查types属性是否为目标值
    if data.get('types') == "super_technique":
        # 避免键不存在报错,同时过滤无效数据
        label = data.get('label')
        node_id = data.get('id')
        if label and node_id:
            technique_dict[label] = node_id
            print(label)  # 直接打印提取到的label

# 输出最终结果
print("\n提取到的super_technique节点信息:")
for label, node_id in technique_dict.items():
    print(f"Label: {label}, ID: {node_id}")

关键修改点

  • 用dict.get()替代直接键访问:data.get('types')、data.get('label'),属性不存在时返回None,不会触发KeyError。
  • 增加有效性判断:确保label和id都存在时才存入字典,避免无效数据混入。
  • 调整打印逻辑:原代码打印的是节点ID,改成打印label更贴合提取需求。

测试结果

用你提供的GML文件运行代码,会输出:

T1592

提取到的super_technique节点信息:
Label: T1592, ID: 17

内容的提问来源于stack exchange,提问作者Hoang Cuong Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:15:07