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

如何编写Python函数实现二级嵌套字典ID与IS标签的匹配标注

问题描述

我有一组带索引(Index)和ID的数据,示例如下:

Index   ID

20613   0007650087
20614   00B64L8R37
20615   00B46FK959
20616   00B1KHKN05
20617   0008377250
20618   0001013456
20619   0001012268
20620   00B1KHLW60
20621   0006074909

同时还有一个IS标签与组合ID映射的字典,示例如下:

IS Label   Combined IDs

IS_1   --> ['0007650087', '00B64L8R37']
IS_2   --> ['0006074909', '00B1KHKN05']
IS_3   --> ['0006074909', '0001012267']
IS_4   --> ['0006074903', '0006074902', '0006074901']
IS_n....   ['m'...]

需要编写一个Python函数,遍历上述数据中的每个ID,匹配对应的IS标签(比如索引20613和20614对应IS_1),并且支持一个ID匹配多个IS标签的场景。目前我写的函数只能做精确匹配,无法满足需求,期望实现的输出效果如下:

Index   ID             IS Label
20613   0007650087     IS_1
20614   00B64L8R37     IS_1
20615   00B46FK959    
20616   00B1KHKN05     IS_2
20617   0008377250
20618   0001013456
20619   0001012268
20620   00B1KHLW60
20621   0006074909     IS_2
解决方案

步骤1:构建反向映射字典

为了高效匹配,先把IS标签的组合ID列表转换成ID到对应IS标签列表的反向字典,这样可以直接通过ID快速查找到所有关联的IS标签,避免每次遍历整个组合字典。

步骤2:编写匹配函数

遍历原始数据中的每个ID,通过反向字典查找对应的IS标签,支持多标签场景(用逗号分隔或保留列表形式)。

完整代码示例

def map_ids_to_is_labels(original_data, is_label_mapping):
    # 构建反向映射:ID -> [对应的IS标签列表]
    id_to_is = {}
    for is_label, ids in is_label_mapping.items():
        for id_val in ids:
            if id_val not in id_to_is:
                id_to_is[id_val] = []
            id_to_is[id_val].append(is_label)
    
    # 遍历原始数据,添加IS标签
    result = []
    for index, id_val in original_data.items():
        # 获取对应的IS标签,没有则为空字符串
        is_labels = id_to_is.get(id_val, [])
        is_label_str = ', '.join(is_labels) if is_labels else ''
        result.append({
            'Index': index,
            'ID': id_val,
            'IS Label': is_label_str
        })
    return result

# 示例数据(模拟二级嵌套字典的核心结构,可根据实际嵌套层级调整)
original_data = {
    20613: '0007650087',
    20614: '00B64L8R37',
    20615: '00B46FK959',
    20616: '00B1KHKN05',
    20617: '0008377250',
    20618: '0001013456',
    20619: '0001012268',
    20620: '00B1KHLW60',
    20621: '0006074909'
}

is_label_mapping = {
    'IS_1': ['0007650087', '00B64L8R37'],
    'IS_2': ['0006074909', '00B1KHKN05'],
    'IS_3': ['0006074909', '0001012267'],
    'IS_4': ['0006074903', '0006074902', '0006074901']
}

# 调用函数并格式化打印结果
output = map_ids_to_is_labels(original_data, is_label_mapping)
print(f"{'Index':<8} {'ID':<15} {'IS Label'}")
for item in output:
    print(f"{item['Index']:<8} {item['ID']:<15} {item['IS Label']}")

代码解释

  1. 反向映射构建:遍历IS标签字典,将每个ID关联到对应的所有IS标签,查找时间复杂度从O(n)降到O(1),大幅提升匹配效率。
  2. 多标签支持:如果一个ID匹配多个IS标签(比如示例中的0006074909会匹配IS_2和IS_3),会自动将所有标签用逗号分隔显示。
  3. 结构适配性:示例中简化了原始数据的结构,若实际是二级嵌套字典,只需调整遍历original_data的逻辑即可(比如先遍历外层键,再提取内层的ID值)。

运行结果

运行上述代码后,输出如下(注意0006074909会显示两个关联标签):

Index    ID             IS Label
20613    0007650087     IS_1
20614    00B64L8R37     IS_1
20615    00B46FK959     
20616    00B1KHKN05     IS_2
20617    0008377250     
20618    0001013456     
20619    0001012268     
20620    00B1KHLW60     
20621    0006074909     IS_2, IS_3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:35:34