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

Python遍历嵌套字典根据指定关键字获取对应值的实现方法及TypeError错误排查

解决TypeError: string indices must be integers错误

咱们先拆解下你遇到的问题,再给出针对性的修复方案:

错误原因分析

你的函数逻辑出现了层级混淆:

  • 外层的VAV_SENSOR_NAME_MAP是一个字典,其中的键是ZN-T这类字符串,对应的值是子字典(比如{'A':'zone', ...})。
  • 你在遍历外层字典的items()时,遇到值是字典就递归调用get_all_values(value, key_word)——这里把目标关键字ZN-T传到了子字典的遍历流程里。
  • 子字典的value是字符串(比如'zone'),当执行print(value[key_word])时,相当于用字符串'ZN-T'去索引另一个字符串,而字符串只能用整数做索引,自然触发了TypeError。

修复后的函数

其实你的需求根本不需要递归,因为目标关键字直接是外层字典的键,直接取值即可:

def get_all_values(nested_dictionary, key_word):
    # 先检查目标关键字是否存在于外层字典中
    if key_word in nested_dictionary:
        # 返回对应子字典的所有值,转为列表方便后续使用
        return list(nested_dictionary[key_word].values())
    # 如果关键字不存在,返回空列表或者自定义提示信息
    return []

# 调用示例
result = get_all_values(VAV_SENSOR_NAME_MAP, 'ZN-T')
print(result)  # 输出: ['zone', 'air', 'temp', 'sensor']

额外优化提示

如果未来你的字典结构变成更深的嵌套(比如子字典里还有子字典),需要递归查找的话,可以调整函数逻辑,但针对当前的两层嵌套结构,上面的代码是最简洁高效的。另外,你原代码里的type(value) is dict可以换成isinstance(value, dict),后者更灵活,能处理字典子类的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:02:48