如何用原生Python快速计算按年份分组的销售数据平均值?
按年份分组计算平均销售额的原生Python实现
核心思路
利用Python内置的字典结构完成年份自动分组,无需为每个年份单独编写判断逻辑,仅使用基础语法即可实现,不需要引入任何第三方库。
基础实现(无额外导入,适合初学者)
# 初始化字典,key为年份,value为对应年份的销售额列表 year_sales = {} # 假设year_value是读取文件得到的每行内容的迭代器 for line in year_value: # 跳过空行,避免文件有空白行导致报错 line = line.strip() if not line: continue year, sale = line.split(":") sale = float(sale) # 年份不存在时先初始化对应空列表 if year not in year_sales: year_sales[year] = [] year_sales[year].append(sale) # 遍历分组结果计算并打印平均值 for year, sales in year_sales.items(): avg = sum(sales) / len(sales) # 可根据需求调整小数保留位数,示例保留2位 print(f"The average sales in {year} were : {avg:.2f}")
代码说明
- 字典
year_sales会自动存储所有出现过的年份,不管是20个还是更多年份都不需要修改代码逻辑 - 所有数据遍历完成后统一计算平均值,比每次新增数据就计算一次的效率更高
- 加入了空行判断,兼容存在格式瑕疵的输入文件
更简洁的标准库实现(无需第三方库)
如果可以使用Python标准库的collections.defaultdict,可以省略判断年份是否存在的步骤,代码更简洁:
from collections import defaultdict # 初始化默认value为列表类型的字典 year_sales = defaultdict(list) for line in year_value: line = line.strip() if not line: continue year, sale = line.split(":") year_sales[year].append(float(sale)) for year, sales in year_sales.items(): avg = sum(sales) / len(sales) print(f"The average sales in {year} were : {avg:.2f}")
补充:文件读取示例
如果你需要直接从文本文件读取数据,可以用以下代码获取year_value:
# 将sales.txt替换为你的实际文件路径 with open("sales.txt", "r", encoding="utf-8") as f: year_value = f.readlines() # 后面接上面的分组计算逻辑即可
内容的提问来源于stack exchange,提问作者Moss
相关产品推荐
相关产品推荐

