根据 'date' 的值对字典列表进行排序,值的格式为 dd-MON-YYYY(例如:15-APR-2021)

Sort a list of dictionary based on values of 'date', and the values are in the format dd-MON-YYYY(example: 15-APR-2021)

我有以下类型的数据,我的排序代码如下示例数据:

list = [{ key1:'value',date:'14-APR-2021'}, {key1:'value', date:'15-MAR-2020'},{key1:'value', date:''}]
sorted_list = sorted(list, key = lambda i: i[date]]))

有了这个我就能得到

sorted_list = [{key1:'value', date:''},{ key1:'value',date:'14-APR-2021'}, {key1:'value', date:'15-MAR-2020'}]

即,它被视为字符串

但正确答案应该是

sorted_list = [{key1:'value', date:''}, {key1:'value', date:'15-MAR-2020'}, { key1:'value',date:'14-APR-2021'}]

您的 date-format 没有按字典顺序排序,这就是您得到错误结果的原因。一种解决方案是按相应的日期时间而不是字符串表示进行排序。

from datetime import datetime

def to_date(s):
    try:
        return datetime.strptime(s, '%d-%b-%Y')
    except ValueError:
        return datetime.min
    
lst = [{'key1':'value', 'date':'14-APR-2021'}, {'key1': 'value', 'date': '15-MAR-2020'},{'key1': 'value', 'date':''}]
result = sorted(lst, key=lambda d: to_date(d['date']))
print(result)

输出:

[{'key1': 'value', 'date': ''}, {'key1': 'value', 'date': '15-MAR-2020'}, {'key1': 'value', 'date': '14-APR-2021'}]

日期是字符串格式,所以当你对列表进行排序时,它实际上是根据字符串字符的 'ascii' 值进行比较的

例如:'a' 比 'b' smaller/less('a' 的 ascii 是 97,'b' 的 ascii 是 98)

在此代码中,

14-APR-202115-MAR-2020

('4' < '5') 在 '14' 和 '15'

因此,“4”小于“5”。