我有类似的元组列表bottles = [(1234, 'ICED', 'MOC12', 3), (1234, 'ICED', 'MOC12', 2), (3456, 'HOT', 'CAR23', 1), (3456, 'HOT', 'YUP23', 2)]我想要每个组对应于最后一个字段的最大值的元组。这些组由前三个值定义。输出:result = [(1234, 'ICED', 'MOC12', 3),(3456, 'HOT', 'CAR23', 1),(3456, 'HOT','YUP23', 2)]
2 回答

猛跑小猪
TA贡献1858条经验 获得超8个赞
根据您的评论,这应该可行:
from itertools import groupby
bottles = [(1234, 'ICED', 'MOC12', 3), (1234, 'ICED', 'MOC12', 2), (3456, 'HOT', 'CAR23', 1), (3456, 'HOT', 'YUP23', 2)]
print([max(group) for key, group in groupby(sorted(bottles), lambda a: a[:3])])

梵蒂冈之花
TA贡献1900条经验 获得超5个赞
bottles = [(1234, 'ICED', 'MOC12', 3), (1234, 'ICED', 'MOC12', 2), (3456, 'HOT', 'CAR23', 1), (3456, 'HOT', 'YUP23', 2)]
sorted(bottles, key= lambda x: x[:3])
>>> [(1234, 'ICED', 'MOC12', 3),
(1234, 'ICED', 'MOC12', 2),
(3456, 'HOT', 'CAR23', 1),
(3456, 'HOT', 'YUP23', 2)]
您也可以使用max代替直接获取最大值sorted。
添加回答
举报
0/150
提交
取消