Firebase嵌套字典值搜索问题:统计指定字符串出现次数
嘿,我来帮你解决这个嵌套字典的搜索统计问题!既然外层字典的键是动态的时间日期,那我们完全不用纠结它,直接遍历外层的所有值(也就是每个内层字典)就行,核心思路就是逐层拆解,检查每个值里的目标字符串。
先明确数据结构(模拟你的Firebase返回数据)
假设你的嵌套字典长这样,外层键是动态的时间戳,内层是每个报告的具体内容:
firebase_data = { "2024-05-20_14:30": { "name": "Alice", "report_content": "这个项目需要优化,优化方案已提交", "tags": ["优化", "提交"] }, "2024-05-21_09:15": { "title": "进度报告", "content": "完成了部分优化工作,优化效果待验证", "author": "Bob" } }
基础版:统计字符串出现次数(处理单层内层字典)
下面这个函数专门适配你的场景,不管外层键是什么,直接遍历所有内层字典,检查每个值里的目标字符串:
def count_target_occurrences(nested_dict, target_str): total_count = 0 # 遍历外层字典的所有内层字典(完全不用关心外层动态键) for inner_dict in nested_dict.values(): # 遍历内层字典的每个值 for value in inner_dict.values(): # 先处理字符串类型的值 if isinstance(value, str): # 如果是"包含"目标字符串就计数,要精确匹配的话改成 == if target_str in value: total_count += 1 # 处理列表类型(比如tags这类字段) elif isinstance(value, list): for item in value: if isinstance(item, str) and target_str in item: total_count += 1 return total_count
调用示例
# 搜索"优化"这个字符串 search_str = "优化" occurrences = count_target_occurrences(firebase_data, search_str) print(f"字符串'{search_str}'总共出现了 {occurrences} 次") # 输出:字符串'优化'总共出现了 3 次
进阶版:递归处理多层嵌套
如果你的内层字典里还有更深的嵌套(比如内层字典里又套了字典),用递归函数更省心,不管多少层都能遍历到:
def count_recursive(data, target_str): count = 0 # 如果是字典,遍历所有值继续递归 if isinstance(data, dict): for val in data.values(): count += count_recursive(val, target_str) # 如果是列表,遍历每个元素继续递归 elif isinstance(data, list): for item in data: count += count_recursive(item, target_str) # 如果是字符串,检查是否包含目标 elif isinstance(data, str): if target_str in data: count += 1 return count
小提示
- 如果需要精确匹配(比如值必须完全等于目标字符串),把
if target_str in value改成if value == target_str就行 - 如果还有其他数据类型(比如数字),可以加判断转成字符串再检查,比如
elif isinstance(value, (int, float)): if target_str in str(value): ...
内容的提问来源于stack exchange,提问作者willm1
相关产品推荐
相关产品推荐

