如何在Python中筛选最近10年JSON数据里质量最大的陨石
解决方法:找出最近10年质量最大的陨石
原代码存在的问题
mass字段是字符串类型,直接调用max(mass)只会对字符串字符做比较,不是按数值大小判断- 每次循环仅处理当前单个陨石的mass,没有在所有符合时间范围的陨石中筛选最大值
- 未同步记录对应陨石的名称,无法输出最终结果
修正后的代码实现
import json import datetime from dateutil.relativedelta import relativedelta # 初始化变量,保存最大质量和对应陨石名称 max_mass = 0 max_name = "" with open('nasadata.json', 'r') as f: data = json.load(f) # 计算最近10年的时间范围 start_date = datetime.datetime.now() - relativedelta(years=10) end_date = datetime.datetime.now() for item in data: # 处理日期字段,跳过无日期或格式错误的条目 year_str = item.get('year') if not year_str: continue try: year = datetime.datetime.strptime(year_str, "%Y-%m-%dT%H:%M:%S.%f") except ValueError: continue # 处理质量字段,转换为数值,跳过无质量或格式错误的条目 mass_str = item.get('mass') if not mass_str: continue try: mass = float(mass_str) except ValueError: continue # 判断是否在时间范围内,更新最大值及对应名称 if start_date <= year <= end_date: if mass > max_mass: max_mass = mass max_name = item.get('name', '未知名称') # 输出最终结果 if max_name: print(f"最近10年着陆的陨石中质量最大的是:{max_name},质量为{max_mass}克") else: print("最近10年没有符合条件的陨石记录")
代码说明
- 用
with语句打开文件,自动管理文件资源,避免泄漏 - 增加异常处理,跳过日期、质量格式错误的无效条目,保证程序稳定性
- 遍历过程中实时更新符合条件的最大质量及对应陨石名称
- 最后根据结果存在与否,输出对应信息
内容的提问来源于stack exchange,提问作者Arijeet Acharyya
相关产品推荐
相关产品推荐

