如何编写popvote函数统计CSV第4列最热品类并以集合格式返回
代码问题说明
原有代码存在以下核心错误:
- 遍历列表时反复覆盖变量
g,最终仅保留最后一行的处理结果,完全缺失频次统计逻辑 - 误用列表
sort方法,该方法为原地排序方法无返回值,也无法实现频次统计需求 - 没有实现提取索引为3的品类字段的逻辑,也没有频次计数、筛选最高频次值的相关步骤
实现代码
假设传入函数的list参数是CSV每行按逗号拆分后形成的子列表组成的总列表,以下实现可直接满足需求:
推荐版本(使用内置统计工具,代码简洁性能高)
from collections import Counter def popvote(list): # 提取所有行索引为3的品类字段 category_list = [row[3] for row in list] # 统计各品类出现频次 count_result = Counter(category_list) # 得到最高频次值 max_freq = max(count_result.values()) # 筛选所有频次等于最高值的品类,转为集合返回 return {cate for cate, cnt in count_result.items() if cnt == max_freq}
调用示例:
# 样例输入(csv拆分后的结构) input_data = [ ['1','8dac2b','ewmzr','jewelry','phone0','9759243157894736','us','69.166.231.58','vasstdc27m7nks3'], ['2','668d39','aeqok','furniture','phone1','9759243157894736','jp','50.201.125.84','jmqlhflrzwuay9c'], ['3','622r49','arqek','vehicle','phone2','9759544365415694736','az','53.001.135.54','weqlhrerreuert6f'], ['4','6444t43','rrdwk','vehicle','phone9','9759543263245434353','au','54.241.234.64','weqqyqtqwrtert6f'] ] print(popvote(input_data)) # 输出:{'vehicle'},符合预期
无依赖手动统计版本
如果要求不使用collections.Counter,可使用手动统计的实现:
def popvote(list): count_dict = {} for row in list: cate = row[3] count_dict[cate] = count_dict.get(cate, 0) + 1 max_freq = max(count_dict.values()) return {cate for cate, cnt in count_dict.items() if cnt == max_freq}
该实现同时支持多个品类并列最高频次的场景,所有符合最高频次的品类都会被包含在返回的集合中。
内容的提问来源于stack exchange,提问作者jordan parker
相关产品推荐
相关产品推荐

