Python 指定条件过滤list列表(列表中元素为元组(tuple))方法

示例列表:

sample_list = [(5,16,2),(5,10,3),(5,8,1),(21,24,1)]

上面前3个元组有类似的第一个元素5,在这种情况下,只有第二个元组应该保留,因为它有最大的最后一个元素=> 3。

输出结果:

result = [(5,10,3),(21,24,1)]

1、使用defaultdict实现

参考文档defaultdict 

from collections import defaultdictsample_list = [(5,16,2),(5,10,3),(5,8,1),(21,24,1)]d = defaultdict(list)for e in sample_list:    d[e[0]].append(e)res = [max(val, key=lambda x: x[2]) for val in d.values()]print(res)

2、使用itertools.groupby 和 operator.itemgetter 实现

参考文档:

itertools.groupby 

operator.itemgetter 

max

from itertools import groupby
from operator import itemgetter as ig
lst = [(5, 10, 3), (21, 24, 1), (5, 8, 1), (5, 16, 2)]
[max(g, key=ig(-1)) for _, g in groupby(sorted(lst), key=ig(0))]
# [(5, 10, 3), (21, 24, 1)]

3、使用itertools.groupby实现

参考文档itertools.groupby

rom itertools import groupbysample_list.sort()print([max(l, key=lambda x: x[-1]) for _, l in groupby(sample_list, key=lambda x: x[0])])

4、使用operator.itemgetter实现

参考文档operator.itemgetter

from itertools import groupbyfrom operator import itemgettersample_list = [(5,16,2),(5,10,3),(5,8,1),(21,24,1)]sample_list.sort()print([max(l, key=itemgetter(-1)) for _, l in groupby(sample_list, key=itemgetter(0))])

或者

from operator import itemgettersample_list = [(5,16,2),(5,10,3),(5,8,1),(21,24,1)]dct = {}for i in sample_list:    if i[0] in dct:        dct[i[0]].append(i)    else:        dct[i[0]] = [i]print([max(v, key=itemgetter(-1)) for v in dct.values()])

免责声明:以上内容(如有图片或视频亦包括在内)有转载其他网站资源,如有侵权请联系删除

咨询热线(9:00 - 18:00)
0755 - 29812418
微信公众号二维码
微信公众号二维码
微信公众号
返回顶部