【问题标题】:find max value in a nested list [duplicate]在嵌套列表中找到最大值[重复]
【发布时间】:2021-02-24 22:42:52
【问题描述】:

我有以下脚本:

data = [['A', 4], ['B', 12], 
        ['C', 20], ['D', 38], 
        ['E', 88], ['F', 88]]
        
print(max(data, key=lambda x: x[1]))

我只得到['E', 88] 作为输出。我怎么能得到['E', 88], ['F', 88],因为两者的最高值相同?

【问题讨论】:

  • mx = max(data, key=lambda x: x[1])[1]; mx_values = [[l, v] for l, v in data if v == mx]; print(mx_values) # [['E', 88], ['F', 88]]
  • @azro max_values = [couple for couple in data if couple[1] == mx] 以便结果始终与基本数据位于同一容器中,而无需指定它是一个列表(您的 [l, v])。
  • @Guimute azro的解决方案错了吗?
  • @user977828 不可以,但是如果您将 data 更改为包含元组 (data = [('A', 4), (B', 12), ...]),则 azro 方法返回的值将是列表而不是元组。

标签: python python-3.x


【解决方案1】:

你可以这样做:

data = [['A', 4], ['B', 12],
        ['C', 20], ['D', 38],
        ['E', 88], ['F', 88]]

lookup = {}

for pair in data:
    lookup.setdefault(pair[1], []).append(pair)


max_key = max(lookup)

print(lookup[max_key])

输出

[['E', 88], ['F', 88]]

函数setdefault 执行以下操作(来自文档):

如果键在字典中,则返回其值。如果没有,请插入密钥 默认值并返回默认值。默认默认为无。

【讨论】:

  • 在我的解决方案中不需要使用带有 max 参数的键 max(lookup) 将在字典的键上
猜你喜欢
  • 2018-10-24
  • 2020-09-22
  • 2015-01-31
  • 2021-02-24
  • 1970-01-01
  • 2021-01-13
  • 2011-06-15
  • 1970-01-01
相关资源
最近更新 更多