Python 中 max 函数中 key 参数的问题

2018 年 4 月 10 日
 whoami9894

一个字典,通过比较值返回最大值对应的键,我想到用 lambda 解析,max(dic,key=lambda i : dic[i])。 在网上看到别人有一种方法 max(dic,key=dic.get),这个把 dic.get 当做参数就有点看不懂了,有没有老哥能解释一下。

3798 次点击
所在节点    Python
17 条回复
jmc891205
2018 年 4 月 10 日
哪里不懂啊 你的 lambda 表达式要实现的不就是 dict.get 的功能?
laike9m
2018 年 4 月 10 日
没有这么用的。要么用 lambda,要么用 operator.itemgetter
whoami9894
2018 年 4 月 10 日
@jmc891205 dic.get 返回的是什么呢,这里有点不懂
whoami9894
2018 年 4 月 10 日
@laike9m 但我试了 dic.get ,确实能返回正确结果
jmc891205
2018 年 4 月 10 日
Morriaty
2018 年 4 月 10 日
请搜索 python __getitem__
whoami9894
2018 年 4 月 10 日
@jmc891205 嗯嗯谢谢老哥!还有一个问题想请教一下,这里的.get 不加括号 是代表 dic 的一个属性 还是 对 dic 方法的调用?
v4dc
2018 年 4 月 10 日
In [2]: di = {}

In [3]: di.get
Out[3]: <function get>

In [4]: lambda i: di[i]
Out[4]: <function __main__.<lambda>>
ipwx
2018 年 4 月 10 日
@laike9m 别误人子弟。dic.get 好好一成员函数,干嘛不能用?

https://docs.python.org/3/library/stdtypes.html?highlight=dict%20get#dict.get

@whoami9894 “函数”也是对象。dic.get 指的就是 dic.get 这个函数,没别的意思。

顺便 dic.get 是已经绑定了 dic 这个实例的 get 成员函数。如果你用 dict.get (所以说你用 dic 这个对象名太屎了),那就是 dict 类中未绑定实例的 get 成员函数。另外一个 bonus,你有时候可以使用 dict.get(dic, i) 来调用一个未绑定的成员函数。
whoami9894
2018 年 4 月 10 日
@aliao0019 懂了懂了,感谢!
whoami9894
2018 年 4 月 10 日
@Morriaty 好的👌
whoami9894
2018 年 4 月 10 日
@ipwx 懂了!万分感谢!
sidewalk
2018 年 4 月 10 日
参数 key 接收的是 dic.get 这个函数呀
jmc891205
2018 年 4 月 10 日
@whoami9894 都不是 是这个函数对象本身。max 内部会去调用它。
laike9m
2018 年 4 月 10 日
@ipwx 嗯是我看错了
laike9m
2018 年 4 月 10 日
好吧,看成了根据 key 找到 value 最大的那个 dict 了……
ebingtel
2018 年 4 月 10 日
@ipwx 这不是误人子弟……毕竟 key 依赖于一个实例对象的方法,没有 operator 稳定……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/445566

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX