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

如何将两个不同长度的元组列表合并转换为指定格式字典列表

实现方案

核心思路是先为a列表的int关联id构建索引字典,避免嵌套循环带来的额外性能开销,再遍历b列表直接匹配对应字段即可,具体实现如下:

  1. 首先构建id到属性的映射字典
# a中每个元组的第2位(下标1)为关联id,映射后可直接O(1)时间查询对应属性
id_map = {item[1]: {"type": item[0], "name": item[2]} for item in a}
  1. 遍历b列表生成目标结果
result = []
# b中每个元组结构为 主语id、谓词、宾语id,直接从映射字典取值拼接即可
for s_id, predicate, o_id in b:
    result.append({
        "s_type": id_map[s_id]["type"],
        "s": id_map[s_id]["name"],
        "predicate": predicate,
        "o_type": id_map[o_id]["type"],
        "o": id_map[o_id]["name"]
    })

测试验证

用给出的示例数据测试,代码如下:

a = [('NC', 0, 'Eyes'),('NC', 3, 'organs'),('NC', 19, 'neurons')]
b = [(0, 'Hypernym', 3),(19, 'Holonym', 0)]

id_map = {item[1]: {"type": item[0], "name": item[2]} for item in a}
result = []
for s_id, predicate, o_id in b:
    result.append({
        "s_type": id_map[s_id]["type"],
        "s": id_map[s_id]["name"],
        "predicate": predicate,
        "o_type": id_map[o_id]["type"],
        "o": id_map[o_id]["name"]
    })

print(result)

输出结果完全符合预期:

[
    {'s_type': 'NC', 's': 'Eyes', 'predicate': 'Hypernym', 'o_type': 'NC', 'o': 'organs'},
    {'s_type': 'NC', 's': 'neurons', 'predicate': 'Holonym', 'o_type': 'NC', 'o': 'Eyes'}
]

补充说明

如果实际数据中存在b里的id不在a的映射字典中的情况,可以提前加判断过滤异常数据,避免抛出KeyError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 08:15:03