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

如何在循环中按顺序使用嵌套键从字典提取数据并捕获KeyError

解决方案

可以写一个支持任意深度嵌套键的批量提取函数,用循环统一处理所有字段,避免重复编写try-except语句:

def extract_person_data(person):
    # 定义字段映射:目标字段名 -> 源数据的键路径(单个键用字符串,嵌套路径用列表)
    field_mappings = [
        ('age', 'age0'),
        ('name', ['name0', 'first0']),
        # 新增字段直接在这里添加即可,比如 ('city', ['location0', 'city0'])
    ]
    
    result = {}
    for target_field, source_keys in field_mappings:
        result[target_field] = None
        try:
            current_value = person
            # 统一处理键路径:把单个键转成列表,兼容嵌套和非嵌套场景
            keys = source_keys if isinstance(source_keys, list) else [source_keys]
            # 逐层遍历嵌套键
            for key in keys:
                current_value = current_value[key]
            # 成功获取到值后更新结果
            result[target_field] = current_value
        except (KeyError, TypeError):
            # 捕获键不存在、或中间值不是可索引类型的异常,保持默认值None
            pass
    return result

# 测试示例
person = {
    'name0': {'first0': 'John', 'last0': 'Smith'},
    'age0': '10',
    'location0': {'city0': 'Dublin'}
}

print(extract_person_data(person))  # 输出: {'age': '10', 'name': 'John'}

代码说明

  • 字段映射:用列表统一管理所有提取规则,目标字段和源数据键路径一一对应,嵌套路径用列表表示,单个键用字符串,新增字段只需添加新的映射项,扩展性极强。
  • 安全取值逻辑:通过循环逐层遍历嵌套键,全程在try块中执行,一旦遇到键不存在、或中间值不是字典(比如某个键对应的值是字符串)的情况,就捕获异常并保持默认值。
  • 批量处理:所有字段通过循环统一处理,无需为每个字段单独编写try-except,完全适配大量字段的提取需求。

如果想要更简洁的写法,可以把安全提取嵌套值的逻辑抽成独立工具函数:

def safe_get(data, keys, default=None):
    """安全获取嵌套字典的值,支持单个键或键路径列表"""
    current = data
    try:
        for key in keys if isinstance(keys, list) else [keys]:
            current = current[key]
        return current
    except (KeyError, TypeError):
        return default

def extract_person_data(person):
    field_mappings = [
        ('age', 'age0'),
        ('name', ['name0', 'first0']),
    ]
    return {target: safe_get(person, source) for target, source in field_mappings}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:30:57