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

OrderedDict以datetime对象为键排序结果异常是什么原因?

排序异常原因分析
  • 核心错误是使用了顺序不符合排序逻辑的日期字符串作为排序键
    你当前用strftime(x[0], '%d-%m-%Y')生成的是「日-月-年」格式的字符串,字符串排序规则是逐位对比字符编码,会优先比较「日」的数值,而非实际日期先后。比如示例中的2021-10-1格式化后是01-10-2021,首字符0小于2021-9-24格式化结果24-09-2021的首字符2,因此最终排序里10月的记录反而排在9月之前,不符合预期。
  • 不必要的类型转换引入了额外出错风险
    Python的datetime.date对象本身原生支持直接比较大小,完全不需要额外转成字符串作为排序键,多余的转换操作反而容易出现格式写错的问题。

修正方案

直接用日期对象本身作为排序键即可,代码如下:

ledger = OrderedDict(
    sorted(ledger.items(), key=lambda x: x[0])
)

如果你确实有需要使用字符串作为排序键的场景,必须使用「年-月-日」的格式顺序(且补全前导零)才能保证字符串排序结果和日期先后一致,写法如下:

# 仅为特殊场景下的兼容写法,优先使用直接比较date对象的方案
ledger = OrderedDict(
    sorted(ledger.items(), key=lambda x: datetime.strftime(x[0], '%Y-%m-%d'))
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:06:03