在列表中查找最大值

2024-04-19 20:35:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种优雅的方法来获取列表列表并找到元素子集的最大值。最好用一个小例子来解释。给定以下输入:

data = [['1','AAA','somestuff','1/5/2018'],
        ['1','AAA','differentstuff','1/5/2018'],
        ['1','AAA','evendifferent','1/10/2018'],
        ['2','BBB','foo','1/12/2018'],
        ['2','BBB','bar','1/20/2018']]

我想返回以下列表:

[['1','AAA','evendifferent','1/10/2018'], 
    ['2','BBB','bar','1/20/2018']]

输出按内部列表的索引1分组,最大值基于日期(内部列表中的最后一项)。你知道吗


Tags: 方法元素列表datafoobar子集例子
1条回答
网友
1楼 · 发布于 2024-04-19 20:35:47

您需要从字符串date获取datetime—否则'1/5/2018'会比'1/10/2018'更大,因为'5' > '1'表示字符串。你知道吗

你可以这样做:

data = [['1','AAA','somestuff','1/5/2018'],
        ['1','AAA','differentstuff','1/5/2018'] ,
        ['1','AAA','evendifferent','1/10/2018'] ,
        ['2','BBB','foo','1/12/2018'] ,
        ['2','BBB','bar','1/20/2018']]


# group by AAA, BBB etc. into lists 
from collections import defaultdict

dd = defaultdict(list)
for d in data:
    dd[d[1]].append(d)

import datetime

# iterate over groups and get the maximum value of each list
for k in dd:
    # for the datetime converted da
    print(max ( dd[k], key = lambda x: datetime.datetime.strptime(x[-1],"%d/%M/%Y")))

文件:

相关问题 更多 >