You need to enable JavaScript to run this app. 如何解决使用defaultdict统计分类下搜索建议计数时返回空列表的问题
优惠活动
大模型
产品
解决方案
定价
更多

如何解决使用defaultdict统计分类下搜索建议计数时返回空列表的问题

问题根因

  • 核心错误是defaultdict默认类型配置错误:你声明的是defaultdict(list),代表每个分类对应的默认值为列表,但后续代码用字典键值对的方式赋值dictionary[category][suggestion] = 1,列表不支持键索引访问,所以无法正常存储数据。
  • 次要问题是直接用正则清洗后split()拆分内容,会把原本带空格的完整搜索建议(比如jio tv)拆成多个独立单词,不符合原始搜索建议的统计需求。
  • 冗余逻辑:你额外写了判断搜索词是否存在的分支,用defaultdict(int)可以省略该判断,自动初始化不存在的键值为0。

修正方案

方案1:按完整搜索建议统计(推荐)

使用ast.literal_eval把DataFrame里字符串格式的列表转成真实列表,避免正则拆分破坏原始内容:

import pandas as pd
from collections import defaultdict
import ast

# 外层字典的每个值默认是用于计数的defaultdict,默认计数为0
dictionary = defaultdict(lambda: defaultdict(int))

for i in range(df.shape[0]):
    # 转换字符串格式的分类列表为真实列表并去重
    categories = set(ast.literal_eval(df.loc[i, 'category']))
    # 转换字符串格式的搜索建议列表为真实列表并去重
    suggestions = set(ast.literal_eval(df.loc[i, 'suggestions']))
    
    for cate in categories:
        for sug in suggestions:
            dictionary[cate][sug] += 1

方案2:按单个单词统计(如果你需要拆分搜索词)

如果你的需求确实是把搜索建议拆成单个单词统计,只需要修正defaultdict的默认类型即可:

import pandas as pd
import re
from collections import defaultdict

dictionary = defaultdict(lambda: defaultdict(int))
for i in range(df.shape[0]):
    categories = set(re.sub(r'[^\w\s]', '', df.loc[i, 'category']).split())
    for category in categories:
        suggestions = set(re.sub(r'[^\w\s]', '', df.loc[i, 'suggestions']).split())
        for suggestion in suggestions:
            dictionary[category][suggestion] += 1

内容的提问来源于stack exchange,提问作者Mohd Abdul Azeem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 08:06:04