Python 字典中最大值对应的键

16 投票
2 回答
9256 浏览
提问于 2025-04-16 13:12
a = dict(((1,3),(0,-1),(3,21)))
m = max(a, key=a.get)

有人能给我解释一下为什么这个会返回对应最大值的键吗?我想了很久都没明白。谢谢!

2 个回答

1

你是在问 key 这个参数是怎么用的吗?它需要一个可以调用的东西,也就是一个函数,这个函数会对字典里的每一个元素进行处理。对于你的字典来说,它的作用就是这样:

a.get(1)  # 3
a.get(0)  # -1
a.get(3)  # 21

然后 max 会用这个函数处理后的结果来进行比较,所以它会选择返回值最高的元素,也就是 3。

23

字典 "a" 在 Python 中是一种可迭代的结构。当你用 for x in a 来循环时,其实是在遍历字典里的键。

在第二行,max 函数有两个参数:一个是可迭代对象(也就是字典 a),另一个是可选的 "key" 函数。这个 key 函数会用来评估字典中每个项目的值,最后会返回最大的那个。

举个例子:

>>> a = dict(((1,3),(0,-1),(3,21)))
>>> for x in a:
...     print x #output the value of each item in our iteration
... 
0
1
3

注意,这里输出的只有 "键"。当我们把这些键传给 "get" 方法时...

>>> a.get(0)
-1
>>> a.get(1)
3
>>> a.get(3)
21

我们就能得到每个键对应的值。现在看看 max 是怎么工作的。

>>> b=[2, 3, 5, 6, 4]
>>> max(b)
6
>>> def inverse(x):
...     return 1.0 / x
... 
>>> max(b, key=inverse)
2

如你所见,max(默认情况下)会在我们的可迭代列表中找到最大的数字。如果我们定义一个 "inverse" 函数,它会返回在 b 中使得 inverse(item) 最大的那个项目。

把这两者结合起来,我们可以看到 max(a, key=a.get) 会返回字典 a 中,值为 a.get(item) 最大的那个 item。也就是说,它会返回对应于最大值的键。

撰写回答