如何基于日期作为关键字对字典列表进行排序

时间:2019-04-09 20:32:05

标签: python python-3.x dictionary

我正在尝试按日期对字典列表进行排序-

这是我的列表-

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'}]

2 个答案:

答案 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)