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

Python技术问题:如何计算字典中model_year字段的平均值

问题排查与解决:用reduce计算车辆年份平均值的错误处理

报错根源分析

  1. 数据类型不匹配:CSV默认读取的所有字段都是字符串,直接对model_year字符串做累加会触发类型错误(比如试图把整数和字符串相加)。
  2. 无效/缺失数据:手动添加的条目或CSV中存在model_year为空、非数字的情况,导致累加时出现异常。
  3. reduce初始值错误:如果reduce的初始值类型与累加值不匹配(比如初始值是字符串,要加整数),也会抛出类型错误。

正确实现代码

第一步:确保数据类型正确(读取CSV+手动添加数据)

import csv
from functools import reduce

# 读取CSV并转换model_year为整数,过滤无效数据
vehicleInventory = []
with open('vehicles.csv', 'r', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        try:
            # 强制转换为整数,跳过无效值
            row['model_year'] = int(row['model_year'].strip())
            vehicleInventory.append(row)
        except (ValueError, KeyError):
            # 处理年份缺失或非数字的情况:直接跳过该条目
            pass

# 添加手动车辆数据(确保model_year为整数类型)
vehicleInventory.extend([
    {"model_year": 2021, "make": "Tesla", "model": "Model 3"},
    {"model_year": 2019, "make": "Chevrolet", "model": "Silverado"},
    {"model_year": 2023, "make": "Hyundai", "model": "Sonata"}
])

第二步:用reduce计算平均值

# 先检查是否有有效数据,避免除以0
if len(vehicleInventory) == 0:
    print("无有效车辆数据可计算")
else:
    # 用reduce累加所有年份总和,初始值设为0(整数类型)
    total_years = reduce(lambda acc, veh: acc + veh['model_year'], vehicleInventory, 0)
    average_year = total_years / len(vehicleInventory)
    print(f"车辆平均年份:{average_year:.2f}")

关键注意事项

  • 类型校验:所有参与计算的model_year必须是整数/浮点数,读取CSV时一定要做类型转换,同时处理异常值。
  • 初始值设置:reduce的第三个参数(初始值)必须是数值类型(比如0),保证累加操作从正确的类型开始。
  • 空数据处理:计算平均值前先判断数据列表是否为空,避免出现ZeroDivisionError。

内容的提问来源于stack exchange,提问作者Conn kal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:12:41