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

如何修改Python JSON遍历walk函数支持列表索引参数取值

问题原因

原来的walk函数仅适配了字典类(Mapping)结构的键遍历逻辑,未兼容列表(Sequence)的索引访问场景,所以传入整数索引访问列表元素时会被判定为路径非法。

修改后的walk函数
from collections import abc

def walk(obj, *path):
    """
    按指定路径遍历JSON结构,找到目标值则返回,否则返回空字典并打印错误
    """
    for segment in path:
        # 处理字典类型的键访问
        if isinstance(obj, abc.Mapping):
            if segment not in obj:
                print(f"Couldn't walk path; {path}")
                return {}
            obj = obj[segment]
        # 处理列表类型的索引访问,排除字符串(字符串属于Sequence但不需要按索引遍历单个字符)
        elif isinstance(obj, abc.Sequence) and not isinstance(obj, str):
            # 校验segment为合法整数索引
            if not isinstance(segment, int) or segment < 0 or segment >= len(obj):
                print(f"Couldn't walk path; {path}")
                return {}
            obj = obj[segment]
        # 既不是字典也不是列表,无法继续遍历
        else:
            print(f"Couldn't walk path; {path}")
            return {}
    return obj
逻辑说明
  • 遍历每个路径段时优先判断当前对象类型
  • 字典类对象沿用原逻辑校验键是否存在
  • 列表类对象额外校验路径段是否为合法整数索引,且在列表长度范围内
  • 排除字符串类型的Sequence判定,避免误将字符串按单个字符拆分访问
测试效果

调用 walk(json_value, "Information", 0) 会返回你期望的列表首元素字典;调用 walk(json_value, "Information", 1) 时会打印路径不存在的提示并返回空字典,符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:15:04