【问题标题】:Python sort list of dates in [MMM dd, MMM dd...] formatPython 对 [MMM dd, MMM dd...] 格式的日期列表进行排序
【发布时间】:2014-06-18 14:14:26
【问题描述】:

我有一个格式的列表

['Jan 01', 'Feb 02', 'Mar 05', 'Feb 04', 'Jan 05', ...]

我想排序得到

['Jan 01', 'Jan 05', 'Feb 02', 'Feb 04', 'Mar 05'...]

我知道operator.itemgetter('date') 之类的东西,但我认为这不适用于这种格式

【问题讨论】:

  • 您的列表是否充满了字符串,即['Jan 01', 'Feb 02', 'Mar 05', 'Feb 04', 'Jan 05'...]
  • your_list.sort() 不起作用?
  • @yedpodtrzitko 试试看 - 它会给出['Feb 02', 'Feb 04', 'Jan 01', 'Jan 05', 'Mar 05', ...],默认按字典顺序排序
  • 不,这只是一个例子,列表非常大。我假设它本身会按字典顺序排序,例如 Apr 会在 Mar 之前,但下面的解决方案可能会起作用
  • 哦,当然,我真傻。)

标签: python sorting date operator-keyword


【解决方案1】:

您可以将日期解析为 datetime 对象:

from datetime import datetime

sorted(lst, key=lambda d: datetime.strptime(d, '%b %d'))

解析后的datetime 对象然后用于确定排序。

演示:

>>> from datetime import datetime
>>> lst = ['Jan 01', 'Feb 02', 'Mar 05', 'Feb 04', 'Jan 05']
>>> sorted(lst, key=lambda d: datetime.strptime(d, '%b %d'))
['Jan 01', 'Jan 05', 'Feb 02', 'Feb 04', 'Mar 05']

【讨论】:

  • 我认为这可行,谢谢!我不确定如何格式化,但 '%b %d' 似乎可以工作
  • @user3752900 你可以看到格式化指令列表here
猜你喜欢
  • 2013-07-26
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 2018-04-30
  • 2014-10-30
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
相关资源
最近更新 更多