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

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))

修改要点

  1. get_max函数逻辑修正:

    • 先用dic.get(datum, [])获取目标日期的所有传感器数据,避免键不存在报错
    • 针对当日数据,用max()函数以新冠水平(每个列表的第二个元素)为key取最大值
    • 格式化返回结果为要求的字符串格式
  2. 输入处理优化:

    • 增加strip()处理输入中的空格,避免因空格导致的日期匹配失败或类型转换错误
    • 跳过空的输入项(比如输入末尾可能的空字符串)
    • 简化主函数的循环逻辑,直接遍历data元素而非用range(len(data))

内容的提问来源于stack exchange,提问作者msh schoonmaak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:35:23