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

