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
相关产品推荐
相关产品推荐

