У меня проблема с получением наибольшего значения в динамическом списке списков кортежей.Список может выглядеть следующим образом:
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 (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]
Это все еще делает то, что я хочу, но разве это не грязно?