元组列表中的最大值

Sno*_*llz 7 python list max

我有一个问题是在动态元组列表中获得最高值.
List可能如下所示:

adymlist = [[('name1',1)],[('name2',2),('name3',1), ...('name10', 20)], ...,[('name m',int),..]]
Run Code Online (Sandbox Code Playgroud)

现在我遍历List以获得最高值(整数):

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, ..}
Run Code Online (Sandbox Code Playgroud)

我尝试了很多以获得最大值,但我发现我的问题没有结论.我知道我必须遍历列表中的每个元组并将其与下一个元组进行比较,但它不知道如何正确编码.

我也可以使用该函数,max()但它不能与字符串和整数一起使用.fe a = [ ('a',5),('z',1)]- >结果是max(a) ---> ('z',1)obv 5> 1但是z> a所以我试图扩展max函数max(a, key=int)但是我得到了一个Type Error.

希望你能理解我想要的东西;-)

UPDATE

谢谢到目前为止.

如果我使用itertools.chain(*adymlist),max(flatlist, key=lambda x: x[1])
我会得到一个例外:max_word = max(flatlist,key = lambda x:x [1])TypeError:'int'对象是unsubscriptable

但如果我使用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]
Run Code Online (Sandbox Code Playgroud)

它仍然做我想要的,但它不是脏吗?

dfb*_*dfb 16

为了澄清,看起来你已经有一个元组列表列表.看起来我们并不关心它们所在的列表,因此我们可以将其简化为两个步骤

  • 将列表列表展平为元组列表
  • 找到最大值

第一部分可以通过实现itertools.chain (参见例如,在Python中展平浅表)

第二个可以通过max解决,你有正确的想法,但你应该传递一个函数而不是你想要的类型.此函数需要返回您键入的值,在本例中为元组的第二部分

max(flatlist, key=lambda x: x[1])
Run Code Online (Sandbox Code Playgroud)

更正

我重新阅读了你的问题 - 你在寻找每个子列表中的最大值吗?如果是这种情况,那么只有第二部分适用.只需遍历列表中的每个列表

比你现在想要的更加pythonic

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

要么

map(lambda x:  max(x, key=lambda y: y[1]) , lists)
Run Code Online (Sandbox Code Playgroud)