python - 为什么在字典中使用 lambda 时 Python 中的 min() 会返回键?

标签 python

我正在学习 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 字典中的每个键都作为参数 k 发送到 lambda,然后 lambda 返回与键 k< 关联的值prices 字典中。因此,在遍历所有键之后,将返回一个值列表,该值用作 min 函数的参数,该函数最终返回字典中的最小值(在本例中为 10.75)。

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

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

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

最佳答案

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

也许拼出这条线会有所帮助

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

用语言表达:

"Find the minimum of the iterable prices (the dictionary keys1), as if each key k had the value prices[k]."

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

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

或更短:

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

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

关于python - 为什么在字典中使用 lambda 时 Python 中的 min() 会返回键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53343366/

相关文章:

python - 使用列表中的值检查字符串中的字母和数字序列 (Python)

python - tkinter.Listbox 滚动条 yview

python - 如何创建单个数据框列的热图

python - matplotlib 中是否有一个参数可以稍微调整条形图的指定位置?

python - 服务器完成初始化后,如何在 Django 中运行启动代码?

python - 如何简化这些字典理解?

javascript - Ajax 和 Django 表单

python - 在字符串中每 3 个字符后插入句点

python - 如何使用 pandas reshape 每第 n 行的数据?

python - 统计模型 : change variable name/label in the output