You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中min函数key参数作用及为何使用scores.get而非scores.values

关于Python中min函数key参数的疑问解答

首先明确min函数key参数的核心规则

  • min(iterable, key=func)中的key要求传入一个可调用对象(通常是函数)
  • 这个函数会依次作用在iterable的每一个元素上,得到对应的计算值
  • min会根据所有计算值的大小做比较,最终返回计算值最小对应的原迭代元素,而非计算值本身

代码场景解析

你的scores是结构为{叶节点大小: 对应MAE值}的字典:

scores = {leaf_size: get_mae(leaf_size, train_X, val_X, train_y, val_y) for leaf_size in candidate_max_leaf_nodes}

直接对字典做迭代时,默认迭代的是字典的所有键,也就是所有候选的叶节点大小值。

为什么key=scores.get是对的

scores.get是字典内置的取值方法,传入一个键就会返回该键对应的值。
当min遍历每个叶节点大小(也就是scores的键)时,会把每个键传给scores.get,得到该叶节点对应的MAE值,min就会按照MAE值比较大小,最终返回MAE最小对应的那个原键(也就是叶节点大小),正好符合找最优树大小的需求。

我们可以用简单示例验证逻辑:

scores = {3: 10, 5: 8, 7: 12}
best = min(scores, key=scores.get)
print(best) # 输出5,正好是MAE最小的8对应的叶节点大小

为什么不能用key=scores.values

有两个核心问题:

  1. scores.values本身是字典的内置方法,不需要接收参数,你把迭代的每个键传给它会直接抛出参数不匹配的报错;就算你写成scores.values(),它返回的是所有值的视图对象,不是可调用的函数,完全不符合key参数的输入要求。
  2. 退一步说,就算你强行把values传进去,min也无法把迭代的键和values里的值做一一对应匹配,根本得不到正确的比较依据。

内容的提问来源于stack exchange,提问作者Muhannad ١

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:54:02