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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:21:58