【转】Python中max(),min() 的key操作

def func(p):
   return p.totalScore     

现在max成为:

max(players, key=func)

但是由于def语句是复合语句,它们不能用于需要表达式的地方,这就是为什么有时使用lambda的原因。

注意,lambda等同于你在一个def的return语句中。因此,不能在lambda中使用语句,只允许表达式。

max是什么?

max(a, b, c, …[, key=func]) -> value

With a single iterable argument, return its largest item. With two or
more arguments, return the largest argument.

因此,它只返回最大的对象。

How key works?
默认情况下,Python 2键基于对象的类型(例如字符串总是大于整数)基于set of rules比较项目。

要在比较之前修改对象或基于特定属性/索引进行比较,必须使用关键参数。

实施例1:

一个简单的例子,假设你有一个字符串形式的数字列表,但你想比较这些项目的整数值。

>>> lis = ['1','100','111','2']

这里max使用它们的原始值比较项目(字符串是字典比较,所以你会得到’2’作为输出):

>>> max(lis)
'2'

要通过它们的整数值比较项目,请使用带有简单lambda的键:

>>> max(lis, key=lambda x:int(x))  #compare `int` version of each item
'111'

示例2:将max应用于列表列表。

>>> lis = [(1,'a'),(3,'c'), (4,'e'), (-1,'z')]

默认情况下,max将通过第一个索引比较项目,如果第一个索引是相同的,那么它会比较第二个索引。在我的例子中,所有项目都有唯一的第一个索引,所以,你会得到这个答案:

>>> max(lis)
(4, 'e')

但是,如果你想通过索引1的值比较每个项目怎么办?简单,使用lambda:

>>> max(lis, key = lambda x: x[1])
(-1, 'z')

比较包含不同类型对象的iterable中的项目:

混合项目列表:

>>> lis = ['1','100','111','2', 2, 2.57]

In Python 2 it is possible to compare items of two different types

>>> max(lis) # works in Python 2
'2'
>>> max(lis, key=lambda x: int(x)) #compare integer version of each item
'111'

But in Python 3 you can’t do that any more

>>> lis = ['1','100','111','2', 2, 2.57]
>>> max(lis)
Traceback (most recent call last):
  File "<ipython-input-2-0ce0a02693e4>", line 1, in <module>
    max(lis)
TypeError: unorderable types: int() > str()

但这工作,因为我们比较每个对象的整数版本:

>>> max(lis, key=lambda x: int(x)) # or simply `max(lis, key=int)` 
>>> '111'

敲黑板,所以,如果要返回字典中value最大的item,只需如下操作:

>>> prices = {
...     'A':123,
...     'B':450.1,
...     'C':12,
...     'E':444,
... }
>>> max(prices.items(),key=lambda x:x[1])
('B', 450.1)
>>> 

转载于:https://www.cnblogs.com/bjwu/articles/9028399.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值