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

如何获取字典中字符串格式最新日期对应的键?现有方法返回错误结果

解决字典中字符串日期的最新日期键获取问题

这个问题我之前踩过坑!问题根源在于直接用字符串比较日期是不可靠的——Python对字符串的比较是逐字符按ASCII码来的,你示例里的"2018-02-2"和"2018-02-17",当对比到日期部分的第3位数字时,"2"的ASCII码比"1"大,所以字符串层面会判定"2018-02-2"更大,这才让max(date, key=date.get)返回了错误的buy_date。

正确的解决方法:将字符串转成datetime对象再比较

我们需要在max的key函数里,把每个键对应的日期字符串转换为Python的datetime对象,这样就能基于真实的日期时间大小来比较了:

from datetime import datetime

date_dict = {"sale_date": "2018-02-17 20:11:37.017298", "buy_date": "2018-02-2 20:11:37.017298"}
latest_key = max(date_dict, key=lambda k: datetime.strptime(date_dict[k], "%Y-%m-%d %H:%M:%S.%f"))
print(latest_key)  # 输出:sale_date

代码解释:

  • datetime.strptime():按照指定的格式(%Y-%m-%d %H:%M:%S.%f对应你的日期格式:年-月-日 时:分:秒.微秒),把字符串解析成datetime对象。
  • lambda k: ...:作为max的key函数,传入每个键k,返回对应的datetime对象供max比较大小。

备选方案(不推荐):补全日期前导零

如果你的日期格式固定是ISO格式,也可以把日期部分的单数字补成两位(比如把"2018-02-2"改成"2018-02-02"),这样字符串比较就能正确排序。但这种方法局限性很大——一旦日期格式有变动(比如少了微秒、月份是单数字但没补零)就会失效,所以还是优先推荐转datetime的方法。

额外提醒

如果你的字典里可能存在无效的日期字符串,建议加上异常处理,避免程序崩溃:

from datetime import datetime

date_dict = {"sale_date": "2018-02-17 20:11:37.017298", "buy_date": "2018-02-2 20:11:37.017298", "invalid_date": "not a date"}

def parse_date(date_str):
    try:
        return datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S.%f")
    except ValueError:
        # 处理无效日期,比如返回一个极早的日期
        return datetime.min

latest_key = max(date_dict, key=lambda k: parse_date(date_dict[k]))
print(latest_key)  # 依然输出:sale_date

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:42:38