То, что вы предполагаете, может быть легко достигнуто с помощью , сортируя ваши товары и удаляя дубликаты. Обратите внимание, что, поскольку вы имеете дело с парами кортежей, удаление дубликатов здесь указывает удаление пар с тем же первым элементом. Сортировка элементов в по возрастанию любой способ заказал бы такие элементы, что , если две пары имеют одинаковый первый элемент, пара с более крупным вторым элементом будет следовать за другим.
Примечание питона ДИКТ/комплект не следуют какой-либо определенной порядке, поэтому важно использования заказанного Словаре
>>> from collections import OrderedDict
>>> lst = [(1,1),(2,1),(2,2),(5,2),(5,6)]
>>> OrderedDict(sorted(lst)).items()
[(1, 1), (2, 2), (5, 6)]
>>> lst = [(2, 1), (2, 2), (2, 3), (3, 1), (5, 1)]
>>> OrderedDict(sorted(lst)).items()
[(2, 3), (3, 1), (5, 1)]
Другой подход, хотя немного запутанным, чтобы использовать GroupBy. Какой из них лучше субъективен и требует сравнения производительности.
>>> from itertools import groupby
>>> from operator import itemgetter
>>> lst = [(2, 1), (2, 2), (2, 3), (3, 1), (5, 1)]
>>> [max(v) for k, v in groupby(sorted(lst), key = itemgetter(0))]
[(2, 3), (3, 1), (5, 1)]
>>> lst = [(1,1),(2,1),(2,2),(5,2),(5,6)]
>>> [max(v) for k, v in groupby(sorted(lst), key = itemgetter(0))]
[(1, 1), (2, 2), (5, 6)]
В качестве более эффективного способа вы можете использовать 'operator.itemgetter' вместо вызова' lambda' в 'sorted'. 'Сортирован (listt, ключ = itemgetter (0))' – Kasramvd