以mm / dd / yy的形式排序日期

时间:2014-07-22 03:49:25

标签: python sorting date tuples

我对Python非常陌生,我想知道如何对元组列表进行排序,其中每个元组的第二个元素是另一个元组,如下所示:

[ ('Adam', (12,16,1949) ), ('Charlie', (9,4,1988) ), ('Daniel', (11,29,1990) ),
('Ellie', (11, 28, 1924) ), ('Feenie', (2,10,1954) ), ('Harry', (8,15,1924) ),
('Iggy', (12, 29, 1924) ), ('Jack', (2,21,1920) )]

我想使用sorted函数对列表进行排序,从最小到最旧,但是当我尝试我的函数时:

def sort_ages(a:list):

    return sorted(a, key=lambda x:x[1][2], reverse=True)

[('Daniel', (11, 29, 1990)), ('Charlie', (9, 4, 1988)), ('Feenie', (2, 10, 1954)),  ('Adam', (12, 16, 1949)), ('Ellie', (11, 28, 1924)), ('Harry', (8, 15, 1924)), ('Iggy', (12, 29, 1924)), ('Jack', (2, 21, 1920))]

它按升序年份组织,但似乎并不关心月份或日期。 我在这里找到的大多数问题的日期都是YYYY-MM-DD。

3 个答案:

答案 0 :(得分:1)

sorted(xs, reverse=True, key=lambda (name, (m,d,y)): (y,m,d))

转换为datetime.date没有必要,但它可能更好地表达了意义。

sorted(xs, reverse=True, key=lambda (name, (m,d,y)): datetime.date(y,m,d))

答案 1 :(得分:0)

使键功能按顺序返回包含年,月,日的元组。

def by_day(t):
    m, d, y = t[1]
    return y, m, d

def sort_ages(a:list):
    return sorted(a, key=by_day, reverse=True)

给定列表的示例输出:

[('Daniel', (11, 29, 1990)),
 ('Charlie', (9, 4, 1988)),
 ('Feenie', (2, 10, 1954)),
 ('Adam', (12, 16, 1949)),
 ('Iggy', (12, 29, 1924)),
 ('Ellie', (11, 28, 1924)),
 ('Harry', (8, 15, 1924)),
 ('Jack', (2, 21, 1920))]

答案 2 :(得分:0)

def sort_ages(a:list):

    return sorted(a, key=lambda x:(x[1][2], x[1][0], x[1][1]), reverse=True)

按年份,然后是月份,然后按日期排序