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

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

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 fe total = {'name1':1,'name10':20, ..} 

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

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

Надеюсь, ты сможешь понять, чего я хочу 😉

ОБНОВИТЬ

Спасибо, пока.

Если я использую itertools.chain(*adymlist) и max(flatlist, key=lambda x: x[1])
Я получаю исключение вроде: max_word = max (flatlist, key = lambda 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] 

Он все еще делает то, что я хочу, но разве это не грязно?

2 Solutions collect form web for “Максимальное значение в списке списков кортежей”

Чтобы уточнить, похоже, что у вас есть список списков кортежей. Не похоже, что мы заботимся о том, в каком списке они находятся, поэтому мы можем упростить это до двух шагов

  • Сгладить список списков в список кортежей
  • Найти максимальное значение

Первая часть может быть выполнена через itertools.chain (см., Например, « Сглаживание мелкого списка в Python» )

Вторая может быть решена с помощью max, у вас есть правильная идея, но вы должны передавать функцию, а не тип, который вы хотите. Эта функция должна вернуть значение, на которое вы наложили ключ, в этом случае вторая часть кортежа

 max(flatlist, key=lambda x: x[1]) 

коррекция

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

Чуть больше пифонов, чем то, что у вас сейчас есть.

 output = [] for lst in lists: output.append( max(flatlist, key=lambda x: x[1]) ) 

или

 map(lambda x: max(x, key=lambda y: y[1]) , lists) 

Как говорит spintheblack, у вас есть список списков кортежей. Я предполагаю, что вы ищете наивысшее целочисленное значение всех кортежей.

Вы можете выполнить итерацию по внешнему списку, затем по списку кортежей кортежей:

 max_so_far = 0 for list in adymlist: for t in list: if t[1] > max_so_far: max_so_far = t[1] print max_so_far 

Это немного более многословно, но может быть легче понять.

  • Python, разность списков рассылки
  • фильтрация элементов из списка списков в Python?
  • Лучший способ удалить элементы из списка
  • в python: разница между двумя списками
  • python удаляет элементы списка из другого списка. С МНОЖЕСТВЕННЫМИ ВОЗВРАТАМИ элементов в обоих
  • Python: как отделить строку запятой
  • список python в dict
  • Преобразование одного списка в отдельные
  • Python - лучший язык программирования в мире.