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

Python中max(List, key=List.get)为何能正确返回结果?

max(字典, key=字典.get)写法的运行原理解释

首先明确:你代码里命名为List的变量实际是字典类型,不是列表,这是后续逻辑的基础。

核心逻辑拆解

  • 先讲max()的key参数规则:Python内置max()函数的第一个参数接收可迭代对象,key参数需要传入一个可调用对象(函数、方法都算)。遍历可迭代对象时,max()会把当前遍历到的元素传入这个可调用对象,用返回值作为大小比较的权重,最终返回权重最高的原始元素,不是权重本身。
  • 再讲字典的默认遍历行为:直接遍历字典时,默认迭代产出的内容是字典的所有键,不会直接遍历值或者键值对。对你的示例字典来说,遍历拿到的元素依次是'7'、'8'、'6'三个字符串键。
  • 最后讲List.get的本质:这是字典绑定的实例方法,作用是接收一个键作为入参,返回该键对应的字典值,键不存在时默认返回None。注意这里写List.get没有加括号,不是当场执行方法拿返回值,而是把方法本身作为可调用对象传给了key参数。

对应你示例的实际执行流程

你写的代码运行时的步骤,和下面手写的逻辑完全等价:

char_count = {'7':3, '8':50, '6': 2}
max_char = None
max_count = -1
# 遍历字典的所有键
for char in char_count:
    # 等价于key函数的调用:拿当前键去取对应的频次
    current_count = char_count.get(char)
    if current_count > max_count:
        max_count = current_count
        max_char = char
# 最终max_char就是'8',和max(char_count, key=char_count.get)返回结果一致

常见误区说明

很多初学者会误写为List.get()——加括号代表立刻调用这个方法,而get方法本身要求传入要查询的键作为参数,直接无参调用会直接抛出类型错误。不加括号时只是传递方法引用,max()内部遍历到每个键的时候,会自动把当前键作为参数传给get方法完成取值。

这个写法和写max(List, key=lambda k: List[k])效果完全一致,只是直接传内置的get方法更简洁,不需要额外定义匿名函数。

内容的提问来源于stack exchange,提问作者Zhe Hin Yap

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:27:22