Tengo un problema para conseguir el más alto valor en una lista dinámica de listas de tuplas.
La lista se parece a esto:Valor máximo dentro de una lista de listas de Tupla
adymlist = [[('name1',1)],[('name2',2),('name3',1), ...('name10', 20)], ...,[('name m',int),..]]
Ahora bucle a través de la lista para obtener el mayor valor (entero):
total = {}
y=0
while y < len(adymlist):
if len(adymlist) == 1:
#has the List only 1 Element -> save it in total
total[adymlist[y][0][0]] = adymlist[y][0][1]
y += 1
else:
# here is the problem
# iterate through each lists to get the highest Value
# and you dont know how long this list can be
# safe the highest Value in total f.e. total = {'name1':1,'name10':20, ..}
He intentado un montón de obtener el máximo valor pero he encontrado ninguna conclusión para mi problema Sé que debo recorrer cada Tupla de la Lista y compararla con la siguiente, pero no sé cómo codificarla correctamente.
También puedo usar la función max()
pero no funciona con cadenas y números enteros. f.e. a = [ ('a',5),('z',1)]
-> el resultado es max(a) ---> ('z',1)
obv 5> 1 pero z> a, así que traté de expandir la función máxima con max(a, key=int)
pero recibí un Error de tipo.
espero que puedan entender lo que quiero ;-)
ACTUALIZACIÓN
Gracias hasta ahora.Si uso itertools.chain(*adymlist)
y max(flatlist, key=lambda x: x[1])
voy a conseguir una excepción como: max_word = max (flatlist, clave = lambda x: x [1]) TypeError: objeto 'int' es unsubscriptable
pero si use itertools.chain(adymlist)
funciona bien. Pero no sé cómo sumar todos los enteros de cada Tupla de la lista. Necesito tu ayuda para resolverlo.
De lo contrario, escribí una solución para itertools.chain(*adymlist)
para obtener la suma de todos los números enteros y el número entero más alto en esa lista.
chain = itertools.chain(*adymlist)
flatlist = list(chain)
# flatlist = string, integer, string, integer, ...
max_count = max(flatlist[1:len(flatlist):2])
total_count = sum(flatlist[1:len(flatlist):2])
# index of highest integer
idx = flatlist.index(next((n for n in flatlist if n == max_count)))
max_keyword = flatlist[idx-1]
Todavía hace lo que yo quiero, pero no es ensuciar?