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

2018-04-10 10:33:38 +08:00
 whoami9894

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

3198 次点击
所在节点    Python
17 条回复
jmc891205
2018-04-10 10:48:39 +08:00
哪里不懂啊 你的 lambda 表达式要实现的不就是 dict.get 的功能?
laike9m
2018-04-10 11:00:50 +08:00
没有这么用的。要么用 lambda,要么用 operator.itemgetter
whoami9894
2018-04-10 11:01:17 +08:00
@jmc891205 dic.get 返回的是什么呢,这里有点不懂
whoami9894
2018-04-10 11:01:48 +08:00
@laike9m 但我试了 dic.get ,确实能返回正确结果
jmc891205
2018-04-10 11:07:09 +08:00
Morriaty
2018-04-10 11:18:17 +08:00
请搜索 python __getitem__
whoami9894
2018-04-10 11:19:33 +08:00
@jmc891205 嗯嗯谢谢老哥!还有一个问题想请教一下,这里的.get 不加括号 是代表 dic 的一个属性 还是 对 dic 方法的调用?
aliao0019
2018-04-10 11:21:38 +08:00
In [2]: di = {}

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

In [4]: lambda i: di[i]
Out[4]: <function __main__.<lambda>>
ipwx
2018-04-10 11:23:24 +08:00
@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-04-10 11:24:10 +08:00
@aliao0019 懂了懂了,感谢!
whoami9894
2018-04-10 11:24:35 +08:00
@Morriaty 好的👌
whoami9894
2018-04-10 11:26:52 +08:00
@ipwx 懂了!万分感谢!
sidewalk
2018-04-10 11:29:50 +08:00
参数 key 接收的是 dic.get 这个函数呀
jmc891205
2018-04-10 11:31:03 +08:00
@whoami9894 都不是 是这个函数对象本身。max 内部会去调用它。
laike9m
2018-04-10 11:31:15 +08:00
@ipwx 嗯是我看错了
laike9m
2018-04-10 11:38:28 +08:00
好吧,看成了根据 key 找到 value 最大的那个 dict 了……
ebingtel
2018-04-10 12:58:53 +08:00
@ipwx 这不是误人子弟……毕竟 key 依赖于一个实例对象的方法,没有 operator 稳定……

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

https://www.v2ex.com/t/445566

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

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

© 2021 V2EX