月度州级最小降雨量计算编程问题求助
按月份和州分组计算最小月度降雨量的解决方案
原代码的核心问题
原代码里的minimum_monthly_rainfall字典只按月份聚合了所有州的降雨量,没有区分不同州的数据,所以没法单独计算每个州当月的最小值。咱们需要把字典改成嵌套结构:{月份: {州: [降雨量列表]}},这样才能实现按双维度分组。
修改后的完整代码
minimum_monthly_rainfall = {} is_first_line = True for row in open("climate_data_2017.csv"): if is_first_line: is_first_line = False continue # 跳过表头行 values = row.strip().split(",") # 去除换行符,避免干扰数据分割 # 提取月份(日期格式为YYYY-MM-DD,split后取索引1的元素) month = values[0].split("-")[1] state = values[1].strip() # 清理州名可能带的空格 rainfall_str = values[6].strip() # 处理空降雨量记录(避免转换float时报错) if not rainfall_str: continue rainfall = float(rainfall_str) # 构建嵌套字典:先确保月份存在,再确保对应州的列表存在 if month not in minimum_monthly_rainfall: minimum_monthly_rainfall[month] = {} # 月份对应的值是一个州-降雨量列表的字典 if state not in minimum_monthly_rainfall[month]: minimum_monthly_rainfall[month][state] = [] minimum_monthly_rainfall[month][state].append(rainfall) # 计算并输出每个州每月的最小降雨量 for month, state_data in minimum_monthly_rainfall.items(): for state, rainfall_list in state_data.items(): min_rain = min(rainfall_list) # 按你要求的格式输出,也可以添加最小值让结果更实用 print(f"Month: {month} State: {state} Minimum Rainfall: {min_rain} mm") # 如果只需要你示例中的极简格式,替换为这行: # print(f"Month: {month} State: {state}")
关键调整说明
- 嵌套字典设计:把原来的单层字典改成双层嵌套,实现“月份→州→降雨量列表”的层级关系,完美匹配分组需求。
- 数据清洗:增加
strip()处理换行符和空格,同时跳过空降雨量记录,避免程序崩溃。 - 最小值计算:利用Python内置的
min()函数,直接对每个州当月的降雨量列表求最小值,简洁高效。
逻辑验证(用你给出的例子)
假设NSW在1月的降雨量记录是1、10、5、7,代码会:
- 提取月份
01、州NSW,将四个数值依次加入minimum_monthly_rainfall["01"]["NSW"]列表。 - 计算时调用
min([1,10,5,7])得到1,最终输出Month: 01 State: NSW Minimum Rainfall: 1 mm。
内容的提问来源于stack exchange,提问作者D.Ronald
相关产品推荐
相关产品推荐

