根据 '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-2021
与 15-MAR-2020
('4' < '5') 在 '14' 和 '15'
因此,“4”小于“5”。
我有以下类型的数据,我的排序代码如下示例数据:
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-2021
与 15-MAR-2020
('4' < '5') 在 '14' 和 '15'
因此,“4”小于“5”。