Supongamos que tengo una lista tuples
como esta:
[('Machine1', 88), ('Machine2', 90), ('Machine3', 78), ('Machine1', 90), ('Machine3', 95)]
Y quiero filtrar la lista de modo que solo tenga los valores más altos correspondientes a cada tuple
emparejamiento. Entonces, en este ejemplo, la lista filtrada sería:
[('Machine2', 90),('Machine1', 90), ('Machine3', 95)]
Básicamente, quiero eliminar los duplicados por el valor más alto. Sé que set
solo elimina los duplicados exactos, por lo que no podré hacer eso aquí. Pensé que otro método que podría usar sería usar un dictionary
y actualizarlo mientras recorría la lista si se veía un valor más alto. Sin embargo, ¿cuál es una forma más pitónica de abordar esto?
Aquí hay una solución que usa collections.defaultdict
. La idea es iterar su lista de tuplas y agregarla a las listas. Luego use zip
con map
+ max
para crear el resultado deseado.
from collections import defaultdict
L = [('Machine1', 88), ('Machine2', 90), ('Machine3', 78),
('Machine1', 90), ('Machine3', 95)]
d = defaultdict(list)
for name, num in L:
d[name].append(num)
res = list(zip(d, map(max, d.values())))
Resultado
[('Machine1', 90), ('Machine2', 90), ('Machine3', 95)]
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras