我正在学习 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 keyk
had the valueprices[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/