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

Python3如何使用filter()删除字典值列表内符合条件的子列表

代码实现方案

先定义可灵活修改的匹配参数:

# 可自定义的匹配参数
TARGET_KEY = "A"          # 要处理的字典键
CHECK_INDEX = 2           # 子列表要校验的索引位置
EXCLUDE_VAL = 3242413     # 要删除的子列表对应索引的目标值

1. 字典推导式实现(更推荐,可读性更高)

原有写法的误区是把过滤条件放在了字典键值对的判断逻辑里,实际上我们不需要删除整个键值对,只需要对指定键对应的值列表做子元素过滤即可:

new_dict = {
    key: [sublist for sublist in value if not (key == TARGET_KEY and sublist[CHECK_INDEX] == EXCLUDE_VAL)]
    for key, value in d.items()
}

逻辑说明:如果当前遍历的键不是目标键,key == TARGET_KEY为假,过滤条件恒成立,对应值列表完全保留;如果是目标键,则仅保留指定索引位置不等于排除值的子列表。

2. filter函数实现

filter本身是对可迭代对象的元素做筛选,要实现字典的整体转换,需要搭配map先对每个键值对的值做过滤处理:

new_dict = dict(
    map(
        lambda elem: (
            elem[0],
            list(filter(lambda sub: not (elem[0] == TARGET_KEY and sub[CHECK_INDEX] == EXCLUDE_VAL), elem[1]))
        ),
        d.items()
    )
)

3. 原地修改简化方案

如果你不需要保留原字典,直接修改原对象的话可以一行完成,不需要生成新字典:

d[TARGET_KEY] = [s for s in d[TARGET_KEY] if s[CHECK_INDEX] != EXCLUDE_VAL]

使用你给出的示例字典运行以上任意方案后,d["A"]的输出结果即为期望的[[0, "APPLE", 1202021, "NEW"], [1982, "PEAR", 1299021, "OLD"]]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:45:06