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

如何根据结构化字符串路径删除多层Python字典中的键值对?

从多层嵌套字典中删除指定层级的键值对

问题场景

给定多层嵌套字典结构,需要按照下划线分隔的层级键列表,直接在原字典中删除对应键值对,而非生成新字典。

原始字典

course = {
    'name': 'Python',
    'release_date': '2014-12-01',
    'author': {
        'name': 'john',
        'email': 'john@gmail.com'
    },
    'info': {
        'instructor': 'john',
        'price': 100,
        'location': {
            'city': 'beijing',
            'country': 'china'
        }
    }
}

待删除的层级键列表

bad_keys = ['release_date', 'author_email', 'info_location_city']

处理后目标字典

course = {
    'name': 'Python',
    'author': {
        'name': 'john',
    },
    'info': {
        'instructor': 'john',
        'price': 100,
        'location': {
            'country': 'china'
        }
    }
}

最优实现方案

采用迭代方式拆分键路径,逐层定位到目标键的父字典,直接执行删除操作,确保原字典被修改。

代码实现

def delete_nested_keys(target_dict, bad_key_list):
    for key_path in bad_key_list:
        # 拆分下划线分隔的键路径为层级列表
        key_levels = key_path.split('_')
        current_dict = target_dict
        
        # 遍历到目标键的父层级
        for key in key_levels[:-1]:
            if key not in current_dict:
                # 路径不存在时直接跳过,避免报错
                break
            current_dict = current_dict[key]
        else:
            # 路径完整存在时,删除目标键
            target_key = key_levels[-1]
            if target_key in current_dict:
                del current_dict[target_key]

# 调用示例
delete_nested_keys(course, bad_keys)

方案优势

  1. 直接修改原字典:完全符合需求,无额外内存开销
  2. 容错性强:遇到不存在的键路径时自动跳过,不会抛出KeyError
  3. 高效简洁:迭代方式避免递归深度限制,时间复杂度为O(N*M)(N为待删键数量,M为单键最大层级数)
  4. 逻辑清晰:拆分路径→定位父字典→删除目标键,步骤明确

核心要点

  • 必须定位到目标键的父字典,才能通过del操作删除子键
  • 利用for-else结构判断路径是否完整存在:只有当所有父层级都存在时,才执行删除操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:54:18