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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:00:55