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

基于前后元素值修改Python字典中特定OTHER标签为DCCNP

问题描述

给定如下Python字典:

ip_dict = {'GLArch': {'GLArch-0.png':  ['OTHER', 'Figure 28 TAC '],
                      'GLArch-1.png':  ['DCDFP', 'This insurance '],
                      'GLArch-2.png':  ['DCDNP', 'Item 3'],
                      'GLArch-3.png':  ['OTHER', 'SCHEDULE OF'],
                      'GLArch-4.png':  ['OTHER', 'SCHEDULEed OF3'],
                      'GLArch-5.png':  ['DCCFP', 'COMMERCIAL GENERAL'],
                      'GLArch-6.png':  ['OTHER', 'a The'],
                      'GLArch-7.png':  ['OTHER', 'c Such attorney'],
                      'GLArch-8.png':  ['DCCNP', '2 To any'],
                      'GLArch-9.png':  ['OTHER', 'e as part'],
                      'GLArch-10.png': ['OTHER', '1 A watercraft'],
                      'GLArch-11.png': ['OTHER', '5 That particular'],
                      'GLArch-12.png': ['DCCNP', 'Damages claimed'],
                      'GLArch-13.png': ['OTHER', 'resulting from the'],
                      'GLArch-14.png': ['DCCNP', 'processing or packaging'],
                      'GLArch-15.png': ['DCCNP', 's. Fungi'],
                      'GLArch-16.png': ['OTHER', '1 the actual'],
                      'GLArch-17.png': ['OTHER', '5 6 9 10 11']}}

需求规则

  • 若一个或多个OTHER出现在DCCFP与DCCNP之间,或出现在两个DCCNP之间,则将这些OTHER重命名为DCCNP
  • 示例:GLArch-6/7.png(DCCFP与DCCNP之间的OTHER)、GLArch-9/10/11.png(两个DCCNP之间的OTHER)、GLArch-13.png(两个DCCNP之间的OTHER)都需要替换为DCCNP

预期输出字典

op_dict = {'GLArch': {'GLArch-0.png':  ['OTHER', 'Figure 28 TAC '],
                      'GLArch-1.png':  ['DCDFP', 'This insurance '],
                      'GLArch-2.png':  ['DCDNP', 'Item 3'],
                      'GLArch-3.png':  ['OTHER', 'SCHEDULE OF'],
                      'GLArch-4.png':  ['OTHER', 'SCHEDULEed OF3'],
                      'GLArch-5.png':  ['DCCFP', 'COMMERCIAL GENERAL'],
                      'GLArch-6.png':  ['DCCNP', 'a The'],
                      'GLArch-7.png':  ['DCCNP', 'c Such attorney'],
                      'GLArch-8.png':  ['DCCNP', '2 To any'],
                      'GLArch-9.png':  ['DCCNP', 'e as part'],
                      'GLArch-10.png': ['DCCNP', '1 A watercraft'],
                      'GLArch-11.png': ['DCCNP', '5 That particular'],
                      'GLArch-12.png': ['DCCNP', 'Damages claimed'],
                      'GLArch-13.png': ['DCCNP', 'resulting from the'],
                      'GLArch-14.png': ['DCCNP', 'processing or packaging'],
                      'GLArch-15.png': ['DCCNP', 's. Fungi'],
                      'GLArch-16.png': ['OTHER', '1 the actual'],
                      'GLArch-17.png': ['OTHER', '5 6 9 10 11']}}

尝试的错误代码

def process_dict(ip_dict):
    op_dict = {}
    for key, value in ip_dict.items():
        op_dict[key] = {}
        prev_val = None

        for k, v in value.items():
            if prev_val is not None and ("DCCFP" in prev_val and "DCCNP" in v[0]):
                op_dict[key][k] = ["DCCFP", v[1]]
            else:
                op_dict[key][k] = v

            prev_val = v[0]

    return op_dict

修正后的代码
def process_dict(ip_dict):
    op_dict = {}
    for top_key, sub_dict in ip_dict.items():
        op_dict[top_key] = {}
        replace_other = False  # 标记是否需要将OTHER替换为DCCNP
        
        for img_key, [category, text] in sub_dict.items():
            if category == "DCCFP":
                # 遇到DCCFP,开启替换状态,后续OTHER直到DCCNP都要替换
                replace_other = True
                op_dict[top_key][img_key] = [category, text]
            elif category == "DCCNP":
                # 遇到DCCNP,保留原类别,且保持替换状态(后续OTHER在两个DCCNP之间也要替换)
                op_dict[top_key][img_key] = [category, text]
                replace_other = True
            elif category == "OTHER" and replace_other:
                # 在替换状态下的OTHER,替换为DCCNP
                op_dict[top_key][img_key] = ["DCCNP", text]
            else:
                # 其他情况:非目标区间的OTHER,或其他类别,关闭替换状态并保留原内容
                op_dict[top_key][img_key] = [category, text]
                replace_other = False
                
    return op_dict

代码说明

核心思路是通过状态跟踪来判断是否需要替换OTHER:

  1. 用replace_other变量标记当前是否处于需要替换的区间
  2. 遇到DCCFP时开启替换状态,因为后续的OTHER直到下一个DCCNP都属于目标区间
  3. 遇到DCCNP时,既保留自身类别,又保持替换状态(因为后续的OTHER会处于两个DCCNP之间)
  4. 遇到非目标类别(如DCDFP、DCDNP)或不在替换区间的OTHER时,关闭替换状态并保留原内容
  5. 严格按字典条目顺序处理(Python 3.7+字典默认保留插入顺序,符合需求)

测试验证:运行修正后的函数,返回结果与预期输出完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:39:53