【问题标题】:How to sort a list by date correctly?如何正确按日期对列表进行排序?
【发布时间】:2021-03-26 18:16:17
【问题描述】:

我正在尝试对数据列表进行排序,但似乎排序不起作用。我首先取出列表中的日期部分并尝试将其与当前日期进行比较。

from datetime import datetime, date

test = {
    '3001265': ['Samsung', 'phone', '1200', '12/1/2023', ''],
    '1009453': ['Lenovo', 'tower', '599', '10/1/2020', ''],
    '1167234': ['Apple', 'phone', '534', '2/1/2021', ''],
    '2390112': ['Dell', 'laptop', '799', '7/2/2020', ''],
    '9034210': ['Dell', 'tower', '345', '5/27/2020', ''],
    '7346234': ['Lenovo', 'laptop', '239', '9/1/2020', 'damaged'],
    '2347800': ['Apple', 'laptop', '999', '7/3/2020', '']
}

test_dates = []
for value, index in test.items():
    if index[3] not in test_dates:
        test_dates.append(index[3])

test_day = []
today = date.today()
for date in test_dates:
    other_date = datetime.date(datetime.strptime(date, '%m/%d/%Y'))
    if other_date < today:
        other_date = other_date.strftime('X%m/X%d/%Y').replace('X0','X').replace('X','')
        test_day.append(other_date)
print(test_day)

table = range(len(test_day))
for num in table:
    entry_list = []
    for row, entry in test.items():
        entry = [row] + entry
        for line in entry:
            if test_day[num] in line:
                entry_list.append(entry)
    sorted_entry = sorted(entry_list, key=lambda x: x[4])
    for object in sorted_entry:
        print(object)

我的目标是找到今天之前的所有日期并输出按日期排序的所有信息。 这是输出:

['1009453', 'Lenovo', 'tower', '599', '10/1/2020', '']
['2390112', 'Dell', 'laptop', '799', '7/2/2020', '']
['9034210', 'Dell', 'tower', '345', '5/27/2020', '']
['7346234', 'Lenovo', 'laptop', '239', '9/1/2020', 'damaged']
['2347800', 'Apple', 'laptop', '999', '7/3/2020', '']

理想的输出是按日期或第 4 列排序的行:

['9034210', 'Dell', 'tower', '345', '5/27/2020', '']
['2390112', 'Dell', 'laptop', '799', '7/2/2020', '']
['2347800', 'Apple', 'laptop', '999', '7/3/2020', '']
['7346234', 'Lenovo', 'laptop', '239', '9/1/2020', 'damaged']
['1009453', 'Lenovo', 'tower', '599', '10/1/2020', '']

【问题讨论】:

    标签: python sorting date


    【解决方案1】:

    错误的原因是排序是使用字符串而不是时间完成的。

    你的代码太长了,这种排序其实很容易。

    from datetime import datetime
    
    test = {
        '3001265': ['Samsung', 'phone', '1200', '12/1/2023', ''],
        '1009453': ['Lenovo', 'tower', '599', '10/1/2020', ''],
        '1167234': ['Apple', 'phone', '534', '2/1/2021', ''],
        '2390112': ['Dell', 'laptop', '799', '7/2/2020', ''],
        '9034210': ['Dell', 'tower', '345', '5/27/2020', ''],
        '7346234': ['Lenovo', 'laptop', '239', '9/1/2020', 'damaged'],
        '2347800': ['Apple', 'laptop', '999', '7/3/2020', '']
    }
    data = list(test.values())
    result = sorted(data, key=lambda x:datetime.strptime(x[3], '%m/%d/%Y'))
    print(result)
    

    【讨论】:

    • 我如何将它与今天的日期进行比较,并且只打印过去几天这是我所拥有的 link 但格式打印不正确
    • 尝试print(entry.strftime('%m/%d/%Y')) 替换最后一行。
    • @PythonIs2Hard data = [x for x in test.values() if datetime.strptime(x[3], '%m/%d/%Y') &lt; datetime.today()]
    【解决方案2】:

    尝试更改此行:

    sorted_entry = sorted(entry_list, key=lambda x: x[4])
    

    收件人:

    sorted_entry = sorted(entry_list, key=lambda x: datetime.strptime(x[4], '%m/%d/%Y'))
    

    【讨论】:

    • @Stef 不,是4
    猜你喜欢
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多