我正在尝试按日期对字典列表进行排序-
这是我的列表-
data = [{'5-feb-2019': '34'}, {'21-jan-2019': '12'}, {'10-jan-2019': '34'}, {'5-jan-2019': '34'}, {'25-jan-2019': '34'}]
我尝试了什么
keys=list(k.keys()for k in data)
sorted(data, key=lambda d: [k in d for k in keys], reverse=True)
获取错误
TypeError: unhashable type: 'dict_keys'
预期结果
[{'5-jan-2019': '34'}, {'10-jan-2019': '34'}, {'21-jan-2019': '12'}, {'25-jan-2019': '34'} , {'5-feb-2019': '34'}]
答案 0 :(得分:2)
我喜欢使用dateutil
来解析日期,因为它对工作毫无疑问:
import dateutil.parser
sorted(data, key=lambda _dict: dateutil.parser.parse(list(_dict.keys())[0]), reverse=True)
您遇到的问题是使用dict_keys对象排序,该对象不可排序。您需要将其转换回字符串,然后将其解析为日期,以便可以正确地将一个日期与另一个日期进行比较。
答案 1 :(得分:0)
将字符串转换为日期并将其用作排序键
按日期升序排列
from datetime import datetime
sorted(data, key=lambda date: datetime.strptime(tuple(date)[0], '%d-%b-%Y'))
按日期的降序排列
from datetime import datetime
sorted(data, key=lambda date: datetime.strptime(tuple(date)[0], '%d-%b-%Y'),reverse=True)