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

如何将嵌套列表中匹配字典键的元素替换为对应字典值?

嵌套列表元素替换问题

需求:将嵌套列表中所有匹配字典键的元素,替换为字典对应的取值(取值为列表时需展开),不匹配的元素保持原样。

原代码问题

原代码存在两个核心问题:

  1. 对每个元素k遍历整个字典,无论是否匹配都会执行append,导致不匹配元素被重复添加(字典有3个键,不匹配元素会被添加3次)
  2. 匹配时直接append字典的列表值,没有将列表展开,不符合预期输出的结构

原代码:

list_1 = [[['bg_en', 'AB2_XY_EN', 'AB2'], ['AB2_MAN']], [['bg_en', 'CD2_XY_EN'], ['CD2_MAN']], [['bg_en', 'AB3_XY_EN'], ['AB3_MAN']]]
dict_1 = {'AB2_XY_EN': ['XY_EN ', 'XY_SEL'], 'CD2_XY_EN': ['XY_EN ', 'XY_SEL'], 'AB3_XY_EN': ['XY_EN ', 'XY_SEL']}

new_list_1 = []
for i in list_1:
    sm_list_2 = []
    for j in i:
        sm_list_3 = []
        for k in j:
            for x, y in dict_1.items():
                if k == x:
                    sm_list_3.append(y)
                else:
                    sm_list_3.append(k)
        sm_list_2.append(sm_list_3)
    new_list_1.append(sm_list_2)
print(new_list_1)

修正后的代码

思路:遍历嵌套列表的每个层级,对每个元素直接检查是否在字典键中,匹配则展开字典值的列表添加到结果,不匹配则直接添加原元素。

list_1 = [[['bg_en', 'AB2_XY_EN', 'AB2'], ['AB2_MAN']], [['bg_en', 'CD2_XY_EN'], ['CD2_MAN']], [['bg_en', 'AB3_XY_EN'], ['AB3_MAN']]]
dict_1 = {'AB2_XY_EN': ['XY_EN ', 'XY_SEL'], 'CD2_XY_EN': ['XY_EN ', 'XY_SEL'], 'AB3_XY_EN': ['XY_EN ', 'XY_SEL']}

new_list_1 = []
for outer_item in list_1:
    middle_list = []
    for middle_item in outer_item:
        inner_list = []
        for element in middle_item:
            if element in dict_1:
                # 展开字典对应的列表值
                inner_list.extend(dict_1[element])
            else:
                inner_list.append(element)
        middle_list.append(inner_list)
    new_list_1.append(middle_list)

print(new_list_1)

输出结果

运行修正后的代码,输出与预期一致:

[[['bg_en', 'XY_EN ', 'XY_SEL', 'AB2'], ['AB2_MAN']], [['bg_en', 'XY_EN ', 'XY_SEL'], ['CD2_MAN']], [['bg_en', 'XY_EN ', 'XY_SEL'], ['AB3_MAN']]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:20:27