Максимальное значение в списке Списки кортежей

У меня проблема с получением наивысшего значения в динамическом списке списков кортежей.
Список может выглядеть так:

adymlist = [[('name1',1)],[('name2',2),('name3',1), ...('name10', 20)], ...,[('name m',int),..]]

Теперь я просматриваю список, чтобы получить максимальное значение (целое число):

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, ..}

Я много пытался получить максимальное значение, но не нашел решения моей проблемы. Я знаю, что должен пройти через каждый кортеж в списке и сравнить его со следующим, но он не знает, как правильно его закодировать.

Также я могу использовать функцию max () , но она не работает со строками и целыми числами. fe a = [('a', 5), ('z', 1)] -> результат max (a) ---> ('z', 1) obv 5> 1, но z> a, поэтому я попытался расширить функцию max с помощью max (a, key = int) , но получаю ошибку типа.

Надеюсь, вы понимаете, что я хочу; - )

ОБНОВЛЕНИЕ

Пока спасибо.

Если я использую itertools.chain (* adymlist) и max (flatlist, key = lambda x: x [1])
Я получу исключение, например: max_word = max (плоский список, ключ = лямбда x: x [1]) TypeError: объект int не может быть подписан

НО, если я использую itertools.chain (adymlist) , он работает нормально. Но я не знаю, как суммировать все целые числа из каждого кортежа списка. Мне нужна ваша помощь, чтобы понять это.

В противном случае я написал обходной путь для itertools.chain (* adymlist) , чтобы получить сумму всех целых чисел и наибольшее целое число в этом списке.

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]

Он по-прежнему делает то, что я хочу, но разве не пачкается?

7
задан SnowBallz 17 February 2011 в 19:21
поделиться