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

Python根据字典值获取指定列表:嵌套结构取值报错解决

根据字典键值获取嵌套列表中的对应子列表

问题场景

你有如下嵌套字典列表结构:

charts = [[{'select': 'scatter-form'}], [{'select': 'line-form'}]]

需要根据select键的值,获取对应的子列表,比如:

scatterform = [{'select': 'scatter-form'}]
lineform = [{'select': 'line-form'}]

但尝试的方法报错:list indices must be integers or slices, not str。

错误原因

这个错误是因为你试图用字符串(比如'scatter-form')直接作为索引访问列表,但列表只能用整数索引或切片来访问元素,不能用字符串。

解决方案

方法1:遍历查找(推荐,可处理无匹配的情况)

写一个简单的函数,遍历外层列表,逐个检查子列表里的字典值:

def get_target_sub_list(charts, select_value):
    for sub_list in charts:
        # 每个子列表仅包含一个字典,直接取第一个元素
        if sub_list[0]['select'] == select_value:
            return sub_list
    return None  # 无匹配项时返回None

# 调用示例
scatterform = get_target_sub_list(charts, 'scatter-form')
lineform = get_target_sub_list(charts, 'line-form')

方法2:列表推导式(适合确定有匹配项的场景)

如果确定目标值一定存在,可以用列表推导式快速筛选:

scatterform = [sub for sub in charts if sub[0]['select'] == 'scatter-form'][0]
lineform = [sub for sub in charts if sub[0]['select'] == 'line-form'][0]

如果不确定是否存在,用next()加默认值避免索引错误:

scatterform = next((sub for sub in charts if sub[0]['select'] == 'scatter-form'), None)

方法3:预构建映射字典(适合多次查询的场景)

如果需要多次根据select值查询,可以先把数据转换成字典映射,后续查询更高效:

# 构建映射:select值 -> 对应的子列表
chart_map = {sub[0]['select']: sub for sub in charts}

# 直接通过键获取
scatterform = chart_map.get('scatter-form')
lineform = chart_map.get('line-form')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:55:43