首页 > 解决方案 > 为什么在字典中使用 lambda 时 Python 中的 min() 会返回键?

问题描述

我正在学习 Python Cookbook,第 3 版。我遇到了下面的代码:

prices = {'ACME': 45.23,'AAPL': 612.78,'IBM': 205.55,'HPQ': 37.20,'FB': 10.75}

min(prices, key=lambda k: prices[k])

我在 Python 3.6.0 上对此进行了测试,它返回“FB”。

我的理解是prices字典中的每个键都作为参数发送到 lambda k,然后 lambda 返回与字典k中的键关联的值。prices因此,在遍历所有键之后,将返回一个值列表,该列表用作函数的参数,该min函数最终返回字典中的最小值(在本例中为 10.75)。

但是当我运行代码时,程序会打印出密钥(在本例中为“FB”)。我哪里错了?

我已经浏览了文档。它说min返回可迭代的最小项目。我知道min处理键而不是值。我只是不明白当 lambda 返回值列表时它如何返回键。请帮帮我。

编辑:抱歉编辑。我试图在字典中找到最小值的键。上面的代码完美运行,但我不知道它是如何工作的。

标签: python

解决方案


您是正确的,lambda您定义的函数将应用于所有键,但这并不意味着min它将返回您的lambda函数可能返回的任何内容。

拼出这条线可能会有所帮助

min(prices, key=lambda k: prices[k])

用一句话来说:

“找到可迭代的最小值prices(字典键1),就好像每个键k都有值一样prices[k]。”

如果你想要关联的值,你可以使用返回的键来访问prices

>>> prices[min(prices, key=lambda k: prices[k])]
>>> 10.75

或更短:

>>> min(prices.values())
>>> 10.75

1因为字典是键的可迭代(list(prices)给出键列表)。


推荐阅读