如何在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
相关产品推荐
相关产品推荐

