Python遍历数据集统计教育水平出现次数生成频率字典
问题修正方案
现有代码的两个核心错误
- 初始化逻辑错误:你写的字典推导式外层套了方括号
[],生成的是由多个单键字典组成的列表,而不是我们需要的单个频率统计字典 - 遍历统计逻辑错误:
- 错误地将数据条目的教育水平字段和整个频率字典做等值判断,该条件永远不成立
- 累加计数时用整个数据条目
entry作为字典键,而非教育水平字符串
修正后的完整代码
首先初始化符合要求的频率字典:
# 正确初始化:生成单个字典,所有指定教育水平初始值为0 education_level_frequencies = {level: 0 for level in unique_education_levels}
再修正遍历统计逻辑:
for entry in salary_data: edu_level = entry['Education'] # 仅统计列表中存在的教育水平 if edu_level in education_level_frequencies: education_level_frequencies[edu_level] += 1
运行结果
针对你给出的示例数据集,最终输出为:
{ 'A - No HS Diploma': 2, 'B - HS Diploma': 2, 'C - Some College': 0, 'D - Associates': 0, 'E - Bachelors': 4, 'F - Graduate Degree': 2 }
可选简化方案(使用标准库)
如果希望代码更简洁,可以配合collections.Counter实现,同样能保证覆盖所有指定的教育水平:
from collections import Counter # 先统计数据集中所有教育水平的出现次数 counts = Counter(entry['Education'] for entry in salary_data) # 合并到包含所有唯一教育水平的字典中,未出现的项默认值为0 education_level_frequencies = {level: counts.get(level, 0) for level in unique_education_levels}
内容的提问来源于stack exchange,提问作者imkusoh
相关产品推荐
相关产品推荐

