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

如何用点符号和方括号字符串键访问嵌套字典/列表结构

解决方案

要实现直接通过带点符号和数组下标的字符串键访问嵌套字典(含数组)的值,我们可以通过解析键路径+逐层访问的方式实现,无需转换原字典结构。

步骤说明

  1. 解析键路径:把类似g[0].h的字符串拆分为可识别的访问步骤(如["g", 0, "h"]),区分字典键(字符串)和数组下标(整数)。
  2. 逐层访问嵌套结构:遍历解析后的路径,依次访问字典的键或数组的下标,最终拿到目标值。

代码实现

import re

def parse_key_path(key_path):
    # 匹配字典键和数组下标,比如"g[0].h"会拆成[("g", "0"), ("h", None)]
    pattern = re.compile(r'(\w+)(?:\[(\d+)\])?')
    parts = pattern.findall(key_path)
    # 把数组下标转为整数,字典键保留字符串
    return [int(idx) if idx else key for key, idx in parts]

def get_nested_value(data, key_path):
    path_parts = parse_key_path(key_path)
    current = data
    for part in path_parts:
        try:
            current = current[part]
        except (KeyError, IndexError, TypeError):
            # 路径不存在时返回None,也可以改为抛出异常
            return None
    return current

# 测试用的嵌套字典
data = {
    "a": 1,
    "b": 2,
    "c": 3,
    "d": {
        "e": 4,
        "f": 5
    },
    "g": [
        {"h": 6, "i": 7},
        {"h": 8, "i": 9}
    ]
}

# 测试案例
print(get_nested_value(data, "d.e"))  # 输出: 4
print(get_nested_value(data, "g[0].h"))  # 输出: 6
print(get_nested_value(data, "g[1].i"))  # 输出: 9
print(get_nested_value(data, "g[2].h"))  # 输出: None(下标越界)

代码解释

  • parse_key_path:用正则表达式拆分键路径,将数组下标从字符串转为整数,确保后续能正确访问数组。
  • get_nested_value:遍历解析后的路径,逐层访问数据结构;遇到路径不存在的情况(比如键不存在、数组下标越界),返回None,你也可以根据需求修改为抛出KeyError或IndexError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:45:03