Python 中 max 函数中 key 参数的使用问题
一个字典,通过比较值返回最大值对应的键,我想到用 lambda 解析,max(dic,key=lambda i : dic[i])。 在网上看到别人有一种方法 max(dic,key=dic.get),这个把 dic.get 当做参数就有点看不懂了,有没有老哥能解释一下。
Python 中 max 函数中 key 参数的使用问题
哪里不懂啊 你的 lambda 表达式要实现的不就是 dict.get 的功能?
max函数的key参数是用来指定一个函数,这个函数会作用在序列的每个元素上,然后根据函数的返回值来决定最大值。比如你有一个列表里是字典,想按某个键的值找最大,就可以用key=lambda x: x['key']。
举个例子,找分数最高的学生:
students = [
{'name': 'Alice', 'score': 85},
{'name': 'Bob', 'score': 92},
{'name': 'Charlie', 'score': 78}
]
top_student = max(students, key=lambda s: s['score'])
print(top_student) # 输出: {'name': 'Bob', 'score': 92}
这里key=lambda s: s['score']告诉max函数比较每个字典的score值。
也可以用在自定义对象上:
class Product:
def __init__(self, name, price):
self.name = name
self.price = price
products = [
Product('A', 100),
Product('B', 250),
Product('C', 150)
]
most_expensive = max(products, key=lambda p: p.price)
print(most_expensive.name) # 输出: B
简单说就是key让你自定义比较规则。
没有这么用的。要么用 lambda,要么用 operator.itemgetter
dic.get 返回的是什么呢,这里有点不懂
但我试了 dic.get ,确实能返回正确结果
请搜索 python getitem
嗯嗯谢谢老哥!还有一个问题想请教一下,这里的.get 不加括号 是代表 dic 的一个属性 还是 对 dic 方法的调用?
In [2]: di = {}
In [3]: di.get
Out[3]: <function get>
In [4]: lambda i: di[i]
Out[4]: <function main.<lambda>>
别误人子弟。dic.get 好好一成员函数,干嘛不能用?
https://docs.python.org/3/library/stdtypes.html?highlight=dict%20get#dict.get
“函数”也是对象。dic.get 指的就是 dic.get 这个函数,没别的意思。
顺便 dic.get 是已经绑定了 dic 这个实例的 get 成员函数。如果你用 dict.get (所以说你用 dic 这个对象名太屎了),那就是 dict 类中未绑定实例的 get 成员函数。另外一个 bonus,你有时候可以使用 dict.get(dic, i) 来调用一个未绑定的成员函数。
懂了懂了,感谢!
好的👌
懂了!万分感谢!
参数 key 接收的是 dic.get 这个函数呀
都不是 是这个函数对象本身。max 内部会去调用它。
嗯是我看错了
好吧,看成了根据 key 找到 value 最大的那个 dict 了……
这不是误人子弟……毕竟 key 依赖于一个实例对象的方法,没有 operator 稳定……

