【问题标题】:Return maximum value from list of tuples从元组列表中返回最大值
【发布时间】:2021-02-15 21:51:19
【问题描述】:

如果我在括号中有以下嵌套列表:

[('Frank', '8'), ('Peter', '10'), ('Spank', '0')]

如何从列表中返回最大值和对应的名称?

期望的输出:

('Peter', '10')

我试过max(list, key=itemgetter(1))[0],但没有成功。

【问题讨论】:

  • 把你的'8'、'10'和'0'改成整数

标签: python list nested tuples


【解决方案1】:

只需将关键字段转换为 int

data = [('Frank', '8'), ('Peter', '10'), ('Spank', '0')]
mx = max(data, key=lambda e: int(e[1]))
print(mx)

输出

('Peter', '10')

【讨论】:

    【解决方案2】:

    试试这个功能。它将与您的示例格式相同的列表作为输入,并返回具有最大数字的元素。

    def findMax (names): #names = [('Frank', '8'), ('Peter', '10'), ('Spank', '0')]
    numbers = [] #list for storing the numbers
    for i in names:
        numbers.append (int (i [1]))
    
    return names [numbers.index (max (numbers))] #search the max value in numbers and print the names element with the same index
    

    【讨论】:

      【解决方案3】:

      如果你想使用operator.itemgetter,你应该将每个元组的第二项转换为int:

      >>> from operator import itemgetter
      >>> lst = [('Frank', '8'), ('Peter', '10'), ('Spank', '0')]
      >>> max(((k, int(v)) for k, v in lst), key=itemgetter(1))
      ('Peter', 10)
      

      默认情况下,字符串按lexographical 排序进行比较,因此在这种情况下需要进行int 转换。您可以通过执行'8' > '10' 来测试它并看到它返回True。您可以阅读docs 了解更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        • 2011-04-15
        • 2019-04-04
        • 2019-06-24
        • 2023-03-27
        相关资源
        最近更新 更多