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

如何在Python中按指定年份区间筛选数据并计算平均价格?

解决方法

首先得修正你原来计算平均价格的代码——原代码里嵌套遍历字典的items()会导致每个字典被重复计算多次(每个键值对都跑一遍累加),这是错误的。同时结合年份筛选逻辑,具体实现如下:

核心思路

  • 指定目标年份后,计算出允许的年份区间(目标年份±10)
  • 遍历列表时,先把字典中的year转换为整数,判断是否在区间内
  • 仅对符合条件的数据进行价格累加和计数,最后计算平均值

完整代码示例

price_list = [
     {'id': 1, 'name': 'apple', 'price': '100', 'year': '2000', 'currency': 'eur'},
     {'id': 2, 'name': 'apple', 'price': '150', 'year': '2022', 'currency': 'eur'},
     {'id': 3, 'name': 'apple', 'price': '1220', 'year': '160', 'currency': 'eur'},
     {'id': 4, 'name': 'apple', 'price': '150', 'year': '2080', 'currency': 'eur'}
]

# 指定目标年份,这里以2020为例
target_year = 2020
start_year = target_year - 10
end_year = target_year + 10

total = 0
count = 0

for d in price_list:
    # 将year转为整数,避免字符串比较的逻辑错误
    item_year = int(d['year'])
    # 判断当前数据是否在指定年份区间内
    if start_year <= item_year <= end_year:
        total += int(d['price'])
        count += 1
        # 可选:打印每一步的累加状态
        print(f"当前累计总价:{total},累计数量:{count}")

# 计算并输出平均价格,同时处理无符合数据的情况
if count > 0:
    average = total / count
    print(f"平均价格 = {average}")
else:
    print("没有符合年份区间的数据")

关键细节说明

  • 年份类型转换:必须把字典里的year字符串转成整数,否则字符串比较会出现逻辑错误(比如'200' > '2000'的字符串比较结果不符合数值逻辑)
  • 区间判断:用start_year <= item_year <= end_year简洁实现范围检查
  • 异常防护:加入count > 0的判断,避免出现除以0的运行报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:35:32