Python字典按日期查询新冠污水最高含量功能异常求助
问题修复:按指定日期筛选新冠污水数据最大值
需求说明
为阿姆斯特丹市长实现新冠污水含量存储系统:
- 输入规则:首个元素是目标日期,后续为多组以分号分隔的
(date, sensor id, covid level)三元组 - 功能要求:输入指定日期后,返回当日污水中新冠水平最高的传感器ID与对应数值
- 示例输入:
2022−09−08; 2022−09−08, 23, 371; 2022−09−08, 2, 3171; 2022−09−08, 12, 43; 2021−03−21, 4, 129 - 预期输出:
2, 3171
现有问题
当前代码的get_max函数未按目标日期筛选数据,直接返回全局最大值,不符合需求。
原代码
def add_value(dict_obj, key, value): if key not in dict_obj: dict_obj[key] = list() dict_obj[key].append(value) #print(dict_obj) # get maximum for specific day def get_max(dic, datum): #for keys in dic: #if dic.keys() == datum: max_val = max(dic.values(), key=lambda x: x[1][1]) #max_key = next(k for k, v in dic.items() if v == max_val) return max_val if __name__ == "__main__": input = input() input = input.split(';') requested_date = input[0] input.pop(0) data = [] for d in input: date, id, value = d.split(',', 2) instance = (date, (int(id), int(value))) data.append(instance) new_dict = {} for element in range(len(data)): add_value(new_dict, data[element][0], [data[element][1][0], data[element][1][1]]) print(get_max(new_dict, requested_date))
修改方案
核心修改get_max函数,先筛选目标日期的数据,再在该数据集内取最大值:
修改后的完整代码
def add_value(dict_obj, key, value): if key not in dict_obj: dict_obj[key] = list() dict_obj[key].append(value) # 获取指定日期的新冠水平最大值 def get_max(dic, datum): # 取出目标日期对应的所有传感器数据,无数据则返回空列表 day_records = dic.get(datum, []) if not day_records: return "" # 可根据需求调整无数据时的返回值 # 按新冠水平(列表第二个元素)排序取最大值 max_record = max(day_records, key=lambda x: x[1]) # 格式化输出传感器ID和对应数值 return f"{max_record[0]}, {max_record[1]}" if __name__ == "__main__": input_str = input() input_parts = input_str.split(';') requested_date = input_parts[0].strip() # 去除可能的空格 input_parts.pop(0) data = [] for d in input_parts: d = d.strip() # 去除每组数据前后的空格 if not d: continue date, sensor_id, covid_level = d.split(',', 2) # 处理日期和数值的空格问题 date = date.strip() sensor_id = int(sensor_id.strip()) covid_level = int(covid_level.strip()) data.append((date, [sensor_id, covid_level])) new_dict = {} # 简化循环逻辑,直接遍历data元素 for item in data: add_value(new_dict, item[0], item[1]) print(get_max(new_dict, requested_date))
修改要点
get_max函数逻辑修正:- 先用
dic.get(datum, [])获取目标日期的所有传感器数据,避免键不存在报错 - 针对当日数据,用
max()函数以新冠水平(每个列表的第二个元素)为key取最大值 - 格式化返回结果为要求的字符串格式
- 先用
输入处理优化:
- 增加
strip()处理输入中的空格,避免因空格导致的日期匹配失败或类型转换错误 - 跳过空的输入项(比如输入末尾可能的空字符串)
- 简化主函数的循环逻辑,直接遍历
data元素而非用range(len(data))
- 增加
内容的提问来源于stack exchange,提问作者msh schoonmaak
相关产品推荐
相关产品推荐

