Ho un problema per ottenere il valore più alto in un elenco dinamico di liste di tuple.
Il grado di Lista si presenta così:Valore massimo in un elenco di liste di tuple
adymlist = [[('name1',1)],[('name2',2),('name3',1), ...('name10', 20)], ...,[('name m',int),..]]
Ora scorrere l'elenco per ottenere il massimo valore (intero):
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, ..}
Ho provato un sacco per ottenere il massimo valore, ma ho trovato nessuna conclusione al mio problema. So che devo passare in rassegna ogni Tupla nella Lista e confrontarla con la prossima, ma non so come codificarla corretta.
Inoltre, posso utilizzare la funzione max()
ma non funziona con stringhe e numeri interi. f.e. a = [ ('a',5),('z',1)]
-> il risultato è max(a) ---> ('z',1)
obv 5> 1 ma z> a, quindi ho tentato di espandere la funzione max con max(a, key=int)
ma ottengo un errore di tipo.
spera che possiate capire quello che voglio ;-)
UPDATE
Grazie finora.Se uso itertools.chain(*adymlist)
e max(flatlist, key=lambda x: x[1])
mi metterò un'eccezione come: max_word = max (flatlist, key = lambda x: x [1]) TypeError: oggetto 'int' è unsubscriptable
ma se io utilizzare itertools.chain(adymlist)
funziona correttamente. Ma non so come riassumere tutti gli interi da ogni tupla della lista. Ho bisogno del tuo aiuto per capirlo.
In caso contrario, ho scritto una soluzione alternativa per itertools.chain(*adymlist)
per ottenere la somma di tutti gli interi e il numero intero più alto in tale elenco.
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]
Si fa ancora quello che voglio, ma non è per sporco?