list =
[{'name':'test1', 'start_time': '05-24-2015, 05:47 PM'},
{'name':'test2', 'start_time': '04-24-2018, 02:23 PM'},
{'name':'test3', 'start_time': '06-23-2018, 01:41 PM'}]
我想按开始时间对字典进行排序,但是开始时间是一个字符串。我不确定这是否是最好的方法。
我已经尝试过该解决方案在下面起作用,但忽略了有意义的年份。我猜我需要在排序之前删除破折号,空格和逗号吗?
list = sorted(list, k['time_start'], reverse=True)
答案 0 :(得分:2)
字符串只是按字母顺序排序,因此,05-24-2015
当然在04-24-2018
之后,如您所知。
(这是很多软件使用YYYY-MM-DD
日期格式的原因:可以仅按字母顺序对其进行排序就可以了。)
要按日期顺序对它们进行排序,您需要将字符串解析为日期对象。由于日期和时间格式太多,因此您必须具体说明使用的是哪种格式。 strptime
函数是最简单的方法(没有dateutil
这样的第三方库,有时可能会更容易)。
此外,您不能只使用k['time_start']
作为键功能;您需要一个具有k
值并为其返回相应排序键的 function 。您可以使用lambda
内联完成此操作,但是我认为使用离线def
会更容易理解。
另外,time_start
和start_time
不是相同的字符串,并且在Python 3.x中排序函数的key
参数仅是关键字。
所以:
import datetime
def our_key(d):
return datetime.datetime.strptime(d['start_time'], '%m-%d-%Y, %I:%M %p')
现在:
list = sorted(list, key=our_key, reverse=True)
我们正在努力,还有两件事:
list
。这就是类型的名称,如果以后您需要执行类似将元组变成列表的操作,则错误消息将令人困惑。sort
方法,而不是构建排序后的副本,然后将其分配回相同的变量。