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

Python双字典映射生成trsx文件sample节点异常修复

问题根因

先把你之前两段代码的核心问题说透:

  • 第一版硬编码下标取文本的逻辑完全站不住脚:你把Description_list的值转成列表靠固定位置取内容,本质是赌字典遍历顺序永远不变,只要模块下新增意图、字典加载顺序变了,立刻出现文本错位、匹配错误的问题。
  • 第二版只有最后一个节点有文本的问题有两个:一是SubElement没有放在内层循环里创建,全程复用同一个节点对象,前面给text赋的值全被后续循环覆盖,最后只剩最后一次赋值的内容;二是你直接把意图ID当节点文本赋值,根本没去Description_list里匹配对应的展示文案,模块前缀的判断全写在if分支里很容易写错(你贴的错误输出里HATE和HELLO的前缀都写反了)。
正确实现代码

首先把模块和intentref前缀的映射单独抽成配置,不要散在if判断里,后续加模块直接改配置就行:

import xml.etree.ElementTree as ET

# 模块名对应intentref前缀的映射,和预期输出的规则完全对齐
MOD_PREFIX_CONF = {
    "ClickUrl": "MANAGE_URLS",
    "AngryUser": "NEGATIVE",
    "HelloGoodBye": "GREETING",
    "Social": "SOCIAL",
    "AgentMemory": "AGENT_MEMORY"
}

# 假设samples是你已经初始化好的<samples>父节点
# 直接双层遍历,不需要任何硬编码下标、不需要冗余if判断
for mod_name, intent_ids in ModName_Social.items():
    current_prefix = MOD_PREFIX_CONF[mod_name]
    for intent_id in intent_ids:
        # 【关键】每遍历一个意图就新建一个sample节点,绝对不能复用之前的节点对象
        sample_node = ET.SubElement(samples, "sample")
        # 拼接固定属性和规则属性
        sample_node.set("intentref", f"{current_prefix}_{intent_id}")
        sample_node.set("count", "1")
        sample_node.set("excluded", "true")
        # 直接用意图ID当key取对应描述文本,不需要转列表按下标找
        sample_node.text = Description_list[intent_id]
效果说明

运行后生成的节点和你给出的预期输出完全一致,不存在文本错位、空节点的问题:

  • 适配任意单模块多意图场景,后续给任意模块新增意图ID,只要同步在Description_list里加好对应文案,不需要改遍历逻辑
  • 没有硬编码索引,完全靠字典键做匹配,不受字典遍历顺序影响
  • 前缀配置统一维护,不会出现之前if分支写错前缀的低级错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:36:26