所以,我有一个对象列表,它看起来像这样:
ob_start()
现在,我想按日期对对象列表进行排序。我尝试ID Date
1 15/11/2009
2 11/06/2010
3 11/09/2015
4 12/08/2013
5 09/08/2011
6 11/10/2012
7 11/10/2014
,尝试了sorted(list,key=lambda x: datetime.datetime.strptime(x, '%m-%Y'))
,尝试了各种不同的事情,但它根本没有排序。
有人能帮助我吗?
对象看起来像这样:
list.sort()
答案 0 :(得分:0)
根据列表,日期输入格式为:dd / mm / yyy,因此strptime方法期望format参数与输入匹配,因此'%d /%m /%Y'应该传递给strptime。注意:资本%Y期望yyyy,小写%y期望yy。
希望这有帮助!
试试这个:
import datetime
dates = ['15/11/2009',
'11/06/2010',
'11/09/2015',
'12/08/2013',
'09/08/2011',
'11/10/2012',
'11/10/2014']
sorted_dates = sorted(dates, key=lambda x: datetime.datetime.strptime(x, '%d/%m/%Y'))
#This just print the dates for verification
for v in sorted_dates:
print(v)
答案 1 :(得分:0)
假设您的列表看起来像这样:
objects = [
(1, datetime.datetime(1999, 12, 13, 0, 0)),
(2, datetime.datetime(1992, 4, 29, 0, 0)),
(3, datetime.datetime(2001, 5, 23, 0, 0))]
您应该能够使用datetime.timedelta的秒来编写比较函数:
def cmp_objects(tuple_a, tuple_b):
t_delta = tuple_a[1] - tuple_b[1]
return int(t_delta.total_seconds())
sorted_objects = sorted(objects, cmp_objects)
我认为您遇到的主要问题是元组或(日期)字符串的比较是按字典顺序按字母顺序处理的,但您更喜欢数字比较。 cmp_objects
函数引用存储在元组中的datetime对象,然后进行数学运算以将两个日期作为整数进行比较。