一个字典,通过比较值返回最大值对应的键,我想到用 lambda 解析,max(dic,key=lambda i : dic[i])。 在网上看到别人有一种方法 max(dic,key=dic.get),这个把 dic.get 当做参数就有点看不懂了,有没有老哥能解释一下。
![]() | 1 jmc891205 2018-04-10 10:48:39 +08:00 哪里不懂啊 你的 lambda 表达式要实现的不就是 dict.get 的功能? |
2 laike9m 2018-04-10 11:00:50 +08:00 没有这么用的。要么用 lambda,要么用 operator.itemgetter |
![]() | 3 whoami9894 OP @jmc891205 dic.get 返回的是什么呢,这里有点不懂 |
![]() | 5 jmc891205 2018-04-10 11:07:09 +08:00 ![]() |
![]() | 6 Morriaty 2018-04-10 11:18:17 +08:00 请搜索 python __getitem__ |
![]() | 7 whoami9894 OP @jmc891205 嗯嗯谢谢老哥!还有一个问题想请教一下,这里的.get 不加括号 是代表 dic 的一个属性 还是 对 dic 方法的调用? |
![]() | 8 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>> |
![]() | 9 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) 来调用一个未绑定的成员函数。 |
![]() | 10 whoami9894 OP @aliao0019 懂了懂了,感谢! |
![]() | 11 whoami9894 OP @Morriaty 好的 |
![]() | 12 whoami9894 OP @ipwx 懂了!万分感谢! |
![]() | 13 sidewalk 2018-04-10 11:29:50 +08:00 参数 key 接收的是 dic.get 这个函数呀 |
![]() | 14 jmc891205 2018-04-10 11:31:03 +08:00 @whoami9894 都不是 是这个函数对象本身。max 内部会去调用它。 |
16 laike9m 2018-04-10 11:38:28 +08:00 好吧,看成了根据 key 找到 value 最大的那个 dict 了…… |