Python 如何基于相似字段对元组列表进行分组,然后基于另一个字段保持最大值?(不使用熊猫)

Python 如何基于相似字段对元组列表进行分组,然后基于另一个字段保持最大值?(不使用熊猫),python,list,sorting,tuples,Python,List,Sorting,Tuples,我有一个元组列表,比如 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','YUP

我有一个元组列表,比如

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)]

您也可以使用
max
直接获取最大值,而不是通过您的注释进行排序,这样应该可以:

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])])

你的问题不清楚。你说“像这样的事”没有任何解释。请对排序顺序和分组进行清晰、简洁的解释。此外,您似乎为一个输入提供了两个输出。哪一个是你真正想要的?编辑了这篇文章。这就是我要寻找的@RoryDaulton的输出。你是否在寻找前三个元素相同的组,然后找到每个组的最大值?再详细一点会对你的案例大有帮助,这正是我想要的“通过让前三个元素共同定义组,然后找到每个组的最大值”@Izaakvandongenb
len(result)==3
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])])