Python的min函数如何工作

4
我正在阅读一个问题,其中期望的输出是获取具有最小值的元素。
因此,如果...
d= {'a':2,'b':3,'f':5}

答案是a
给出的答案是min(d, key=d.get) 有人可以解释一下这是如何工作的吗?

3
找出字典 d 中能够返回最小可比较值的 key,即函数 d.get(key)(等同于 d[key])的返回结果最小。 - eumiro
@eumiro,如果使用 min(d.values()) 计算最小值函数也可以正常工作,但我不知道第二个参数是用来做什么的。我的意思是第二个参数如何与第一个参数相关。 - user192082107
1
文档非常好。可选的key参数指定一个一元排序函数,就像list.sort()中使用的那样。 - Chris Morgan
3
min(d) 返回的是最小键,而不是具有最小值的键。 - Volatility
1
@user2082226 - 在你的情况下,min(d) 返回 a,是因为 a<b<f,而不是因为 2<3<5。对于 d={'a':3,'b':2,'c':1}min(d) 返回 a,但 min(d, key=d.get) 返回 c(因为 1<2<3)。 - eumiro
显示剩余2条评论
1个回答

4
min函数根据给定的键返回可迭代对象中的最小值。在这种情况下,它返回具有最小值的d的键。d.get允许您访问与字典键对应的值,在迭代d时会遍历这些键。例如:
>>> min([3, 5, 2, 1, 5])
1
>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> for i in d:
...     print i
b
c
a
>>> d.get('b')
2
>>> d.get('d')  # Nothing is returned
>>> min(d, key=d.get)
'a'
min函数的key参数指定你想要在哪个键上寻找最小值。
例如:
>>> min(['243', '172344', '6'])
172344
>>> min(['243', '172344', '6'], key=len)
6
< p > min函数的作用类似于这样:

>>> min(['243', '172344', '6'], key=len)
# sort the list with key (call `len` on every element and sort based on that)
# sorted(['243', '172344', '6'], key=len)
# return the first element (lowest value)
# sorted(['243', '172344', '6'], key=len)[0]
6

i in d 是如何工作的?不是d是字典吗?我以为我们必须使用 d.iteritems() - user192082107
1
@user2082226 遍历字典时,实际上是在遍历它的键 - 这等同于 for i in d.keys() - Volatility
我不太明白这个。所以 d 是字典,这没问题。现在 key=d.get 的作用是什么?我理解 d.get() 可以获取某个键存储的值,但它从哪里获取键呢? - user192082107
@user2082226,min函数调用key对可迭代对象进行排序,并返回结果列表的第一个元素。排序方法会对可迭代对象中的每个元素调用该函数以进行排序。这与mapfilter函数的key参数工作方式类似。 - Volatility
为什么min需要key来排序?您能用代码解释一下调用过程中发生了什么吗?您的意思是min函数需要key,以便它可以获取存储在该键上的值,因此值变为d.get(key)。所以在获取所有值之后,它会按升序对它们进行排序,并给出列表中的第一个值。我是对的吗?所以key=d.get被翻译为对每个项目执行d.get(key)以获取那里的值。 - user192082107
我认为这个问题和答案从教育角度来看都非常有用,不仅如此。谢谢。 - Nikos Alexandris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接