我有以下型別的資料,我的排序代碼如下示例資料:
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'}]
uj5u.com熱心網友回復:
您的日期格式沒有按字典順序排序,這就是您得到錯誤結果的原因。一種解決方案是按相應的日期時間而不是字串表示進行排序。
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'}]
uj5u.com熱心網友回復:
日期是字串格式,因此當您對串列進行排序時,它實際上是根據字串字符的“ascii”值進行比較的
例如:“a”小于/小于“b”(“a”的 ascii 為 97,“b”為 98)
在這段代碼中,
14-APR-2021和15-MAR-2020
('4' < '5') 在 '14' 和 '15'
所以,“4”小于“5”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/447505.html
上一篇:ValueError:時間資料“2021-07-1911:48:03.357 00”與格式“%Y-%m-%d%H:%M:%S.%f%Z”不匹配(匹配)
