【问题标题】:How to sort an array by date in python? [closed]如何在python中按日期对数组进行排序? [关闭]
【发布时间】:2021-02-26 12:31:21
【问题描述】:

我需要按照每个元素中的日期顺序对这个二维数组进行排序。我已经尝试了网站上的所有其他解决方案,但似乎都没有。

lst=[['08/12/2020,gggggh,medium'], 
     ['17/12/2020,hhhhhhh,medium'], 
     ['09/12/2020,bbbbbb,low'], 
     ['30/12/2020,bbbbbb,low']]

【问题讨论】:

  • 到目前为止你尝试过什么?尝试从字符串中提取日期然后排序。
  • 请从intro tour 重复on topichow to ask。 “告诉我如何解决这个编码问题?”与 Stack Overflow 无关。您必须诚实地尝试解决方案,然后就您的实施提出具体问题。 Stack Overflow 无意取代现有的教程和文档。
  • 既然您已经尝试了此站点上的所有内容,那么您就可以发布代码了。在您这样做之前,您没有 Stack Overflow 问题。

标签: python arrays list sorting


【解决方案1】:

我不确定您是否真的尝试过此网站上的所有其他解决方案,但您可以通过以下方式以一种万无一失的方式进行操作:

from datetime import datetime

lst=[['08/12/2020,gggggh,medium'], 
     ['17/12/2020,hhhhhhh,medium'], 
     ['09/12/2020,bbbbbb,low'], 
     ['30/12/2020,bbbbbb,low']]

lst.sort(key = lambda x: datetime.strptime(x[0].split(',')[0], "%d/%m/%Y"))
# Your list `lst` is sorted now.
print(lst)

输出

[['08/12/2020,gggggh,medium'],
['09/12/2020,bbbbbb,low'],
['17/12/2020,hhhhhhh,medium'],
['30/12/2020,bbbbbb,low']]

更新:查看我在上述代码中使用的date-time formatting 的官方文档可能会对您有所帮助。

【讨论】:

  • 我之前尝试过这个确切的解决方案。让我发布错误
  • 哦等等!这次它确实奏效了。我试过的以前的版本没有'从日期时间导入日期时间'行
【解决方案2】:

首先,我投票支持 Daveldito 的答案,因为它是正确的。唯一不同的是,我将日期代码提取到一个函数中,这样它就更具可读性(更重要的是,可测试!),如下所示:

def by_date(item):
    date = item.split(“,”)[0]
    return datetime.strptime(date, “%d/%m/%Y”)

def test_by_date():
    assert by_date(“08/12/2020,gggggh,medium”) == datetime(2020, 12, 8, 0, 0)

lst.sort(key=by_date)

逻辑完全一样,但我觉得这个版本在凌晨 3 点出现故障时更易读,我必须醒来并修复它们。另外,看看编写单元测试来验证您是否按照您认为的值进行排序是多么容易?

但是,这只是 Daveldito 正确(和良好)答案的变体。

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 2019-05-07
    • 1970-01-01
    • 2013-12-18
    • 2015-02-27
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多