我对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。
答案 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)
按年份,然后是月份,然后按日期排序