python - 为什么在字典中使用 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 返回值列表时它如何返回键。请帮帮我。
编辑:抱歉编辑。我试图在字典中找到最小值的键。上面的代码完美运行,但我不知道它是如何工作的。
解决方案
您是正确的,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)
给出键列表)。
推荐阅读
- php - php pdo:从更新语句中获取更多细节
- ssas - SSAS 中的非日期角色扮演维度
- sql - SQL Weird Grouping - 匹配行共享两列中的任何一列的共同值?
- search - 如何根据文件是使用 Podio 本身还是 Google Sheet 的 importXML 上传来过滤项目?
- javascript - 打字稿限制解决方法
- docker - 我需要有关 docker-compose.yml 的信息 - 如何配置/导出到 kubernetes 入口
- scala - 如何在 Scala 中对基于字符串的静态 ID 的枚举进行建模?
- xaml - 将多个绑定上下文添加到 xaml 文件
- r - 查找哪些地理编码点位于以特定点为半径 25 英里的圆内
- c - 在C中返回一个指针,在字符串中查找值