Tienes que tanto filtro y usar un argumento key
al máximo:
from operator import itemgetter
max(filter(lambda a: a[2] >= 100, yourlist), key=itemgetter(1))
El filtro también se puede expresar como una expresión generadora:
max((t for t in yourlist if t[2] >= 100), key=itemgetter(1))
Demostración:
>>> yourlist = [(1, 2, 300), (2, 3, 400), (3, 6, 50)]
>>> max((t for t in yourlist if t[2] >= 100), key=itemgetter(1))
(2, 3, 400)
>>> max(filter(lambda a: a[2] >= 100, yourlist), key=itemgetter(1))
(2, 3, 400)
Tenga en cuenta que debido a que filtra, es fácil terminar con una lista vacía para elegir el máximo, por lo que puede que tenga que ponerse ValueError
s menos que necesite esa excepción para propagar la pila de llamadas:
try:
return max(filter(lambda a: a[2] >= 100, yourlist), key=itemgetter(1))
except ValueError:
# Return a default
return (0, 0, 0)
y lo que la producción habría que esperar si todos los valores tienen 'attR3 <100'? 'max()' levantará un ValueError si recibe una secuencia vacía. –