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

如何检查并更新字典中指定键的日期格式?求技术帮助

问题分析与修复方案

原始数据与需求

输入数据

response = [{'startdata': 'Aug 24, 2022 10:37:50 PM', 'enddata': 'Aug 24, 2022 10:37:50 PM', 'province': 'Mashonaland_Central', 'district': 'Guruve', 'on_consent': '', 'meta': ''}]

data_mod = ["startdata", "enddata"]

需求

遍历data_mod中的字段,若该字段存在于response的字典中,则将其日期格式从%b %d, %Y %I:%M:%S %p转换为%Y-%m-%dT%H:%M:%S+00:00;若字段不存在则直接忽略。

原代码的问题

  1. 字段名不匹配:数据中实际字段是startdata/enddata,但代码硬编码了starttime/endtime,还处理了不存在的CompletionDate/SubmissionDate,直接触发KeyError。
  2. 未按data_mod动态处理:没有遍历data_mod列表,而是固定写死字段,完全不符合需求逻辑。
  3. 异常处理无效:直接raise e等于未处理异常,且没有针对性捕获日期解析或字段不存在的异常。
  4. 生成器逻辑矛盾:函数同时使用yield和return data,yield会让函数变成生成器,后续的return语句不会执行,逻辑混乱。

修复后的代码

from datetime import datetime

def process_response(response, data_mod):
    dateformat_in = "%b %d, %Y %I:%M:%S %p"
    dateformat_out = "%Y-%m-%dT%H:%M:%S+00:00"
    
    for data in response:
        # 遍历data_mod中的字段,动态处理
        for field in data_mod:
            if field in data:
                try:
                    # 解析并转换日期格式
                    parsed_date = datetime.strptime(data[field], dateformat_in)
                    data[field] = parsed_date.strftime(dateformat_out)
                except ValueError as e:
                    # 捕获日期格式解析错误,可根据需求选择跳过或记录日志
                    print(f"解析字段 {field} 的日期失败: {e}")
        # 返回处理后的字典
        yield data

# 调用示例
response = [{'startdata': 'Aug 24, 2022 10:37:50 PM', 'enddata': 'Aug 24, 2022 10:37:50 PM', 'province': 'Mashonaland_Central', 'district': 'Guruve', 'on_consent': '', 'meta': ''}]
data_mod = ["startdata", "enddata"]

processed_data = list(process_response(response, data_mod))
print(processed_data)

代码说明

  • 动态字段处理:通过遍历data_mod列表,检查每个字段是否存在于字典中,完全贴合需求逻辑。
  • 针对性异常捕获:只捕获ValueError(日期格式解析错误),避免掩盖其他类型的错误,同时可根据实际需求添加日志记录或跳过错误字段。
  • 生成器逻辑正确:使用yield逐个返回处理后的字典,保持生成器的特性;若需要一次性返回所有结果,也可改为收集到列表后返回。
  • 字段名匹配:使用数据中实际存在的startdata/enddata字段,彻底避免KeyError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:10:40