如何遍历字典内的嵌套列表并统计指定关键词的总数?
解决嵌套字典/列表中关键词统计问题
你的代码存在的问题
- 第二个
for循环末尾缺少冒号,属于语法错误,实际运行会报错 - 用
yes作为循环变量,直接覆盖了初始定义的计数变量yes,最后打印的是循环迭代的最后一个键名(比如示例里的list1),而非统计结果 - 硬编码
subDict1键名,无法处理多层嵌套或其他键的结构,且没有遍历列表内的元素,自然统计不到目标关键词
正确实现:递归遍历嵌套结构
因为你的数据是多层嵌套的字典和列表,最稳妥的方式是用递归函数遍历所有层级,遇到字符串就检查是否匹配目标关键词:
def count_keyword(data, keyword): count = 0 if isinstance(data, dict): # 遍历字典的所有值,递归处理 for value in data.values(): count += count_keyword(value, keyword) elif isinstance(data, list): # 遍历列表的所有元素,递归处理 for item in data: count += count_keyword(item, keyword) elif isinstance(data, str): # 是字符串则判断是否匹配关键词 if data == keyword: count += 1 # 其他非字符串/字典/列表类型直接忽略 return count # 测试示例(包含多个子列表) dict1 = { "subDict1": { "list1": ["yes", "yes", "no"], "list2": ["yes", "no", "yes"], "subDict2": { "list3": ["no", "yes"] } } } # 统计"yes"的数量 print(count_keyword(dict1, "yes")) # 输出5
代码说明
- 递归函数会自动处理任意层级的嵌套字典和列表
- 遇到字典时,遍历其所有值继续递归;遇到列表时,遍历所有元素继续递归
- 遇到字符串时,判断是否等于目标关键词,是则计数+1
- 其他类型(如数字、布尔值)会被直接忽略,不影响统计
内容的提问来源于stack exchange,提问作者Nevaeha
相关产品推荐
相关产品推荐

