按日期列出对象

时间:2016-06-14 17:34:51

标签: list sorting date python-3.x datetime

所以,我有一个对象列表,它看起来像这样:

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()

2 个答案:

答案 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对象,然后进行数学运算以将两个日期作为整数进行比较。