如何按两个字段分组并按日期时间排序?

时间:2018-05-04 18:01:45

标签: python list date

我列出了子列表,每个子列表中包含三个元素。

 ['1', '10', '2017-05-05']
 ['1', '10', '2017-07-20']
 ['2', '15', '2017-12-12']
 ['2', '15', '2018-01-24']
 ['1', '11', '2017-05-15']
 ['1', '11', '2017-07-21']
 ['2', '16', '2018-01-24']
 ['2', '16', '2018-01-28']

我想在前2个元素上执行一个组,然后返回具有更大日期的列表(意味着更接近今天)。所以我希望输出为:

 ['1', '10', '2017-07-20']
 ['2', '15', '2018-01-24']
 ['1', '11', '2017-07-21']
 ['2', '16', '2018-01-28']

前两行组合在一起然后2017-07-20获胜,因为它大于2017-05-05。

1 个答案:

答案 0 :(得分:0)

您可以使用groupby库中的itertools方法。

from itertools import groupby
for key, rows in groupby(l, lambda x: (x[0], x[1])):
    dates = sorted([item[2] for item in list(rows)])
    print(list(key) + [dates[-1]])

输出

['1', '10', '2017-07-20']
['2', '15', '2018-01-24']
['1', '11', '2017-07-21']
['2', '16', '2018-01-28']

您也可以使用list comprehension

list = [list(key) + [sorted([item[2] for item in list(rows)])[-1]] for key, rows in groupby(l, lambda x: (x[0], x[1]))]