示例列表:
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 实现
参考文档:
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()])
免责声明:以上内容(如有图片或视频亦包括在内)有转载其他网站资源,如有侵权请联系删除
-
设计总结|如何更好地表达活动品牌?
-
谈谈“目标思维”的落地
编辑导读:我们在做数据分析之前,一定要搞清楚需求方的目标到底是什么,要根据目标来重新定义业务方提出的问题,这就是目标思维。目标思维有多重要呢?应该如何落地呢...
-
在线教育平台竞品分析:网易云课堂vs腾讯课堂
本文从移动端出发,对当前比较热门的两款在线教育平台软件-网易云课堂和腾讯课堂进行比较和分析,不足之处还请大家多提意见。 市场分析 随着国内互联网技术的发展和移...
-
即学即用|父亲节活动的4种运营策略
-
B端产品经理和体验设计师的工作职责边界梳理
-
豆果美食电商分支用户体验报告及建议
-
数据分析师如何提高工作效率
在我们的日常工作中,提高工作效率是每个岗位都需要实现的,在工作中,面对比较凌乱的事情时,首先我们需要梳理清楚,按重要级进行开展;本文作者分享了关于...
-
2016中国云计算SaaS移动办公平台年度综合报告
-
网易大布局教育事业:网易公开课、网易云课堂和MOOC分析
-
一篇文章搞懂语音交互的来龙去脉