Python min/max的关键字函数

Dan*_*ick 5 python key min

我试图了解这是如何工作的:

my_dict = {'a':2,'b':1}
min(my_dict, key=my_dict.get)
Run Code Online (Sandbox Code Playgroud)

产生

b
Run Code Online (Sandbox Code Playgroud)

这是一个非常酷的功能,我想要更好地理解.
根据文档

min(iterable [,key])返回可迭代中的最小项或两个或多个参数中的最小值...可选的key参数指定一个单参数排序函数,类似于list.sort().键参数(如果提供)必须采用关键字形式(例如,min(a,b,c,key = func)).

我在哪里可以找到有关可用功能的更多信息?在字典的情况下,是否所有字典方法?

编辑:我今天遇到过这个:

max(enumerate(array_x), key=operator.itemgetter(1))
Run Code Online (Sandbox Code Playgroud)

仍在寻找有关min/max的可用关键字函数的信息

7bS*_*tan 6

你写的代码是

my_dict = {'a':2,'b':1}
min(my_dict, key=my_dict.get)
Run Code Online (Sandbox Code Playgroud)

实际上这适用于min功能.那么,min做什么?

min(a, b, c, ...[, key=func]) -> value
Run Code Online (Sandbox Code Playgroud)

使用单个可迭代参数,返回其最低项.使用两个或多个参数,返回最低参数.

此处的键用于传递自定义比较功能.

示例:输出max by list的长度,其中arg1,arg2都是列表.

>>>> max([1,2,3,4], [3,4,5], key=len)
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

但是如果我想从列表中获取最大值,但是考虑元组的第二个元素呢?在这里我们可以使用官方文档中给出的函数.这些def语句是复合语句,在需要表达式的情况下不能使用,这就是为什么有时使用lambda的原因.

请注意,lambda等同于你在def的return语句中放置的内容.因此,您不能在lambda中使用语句,只允许表达式.

>>> max(l, key = lambda i : i[1])
(1, 9)

# Or

>>> import operator
>>> max(l, key = operator.itemgetter(1))
(1, 9)
Run Code Online (Sandbox Code Playgroud)

所以函数基本上取决于iterable并传递比较标准.

现在在您的示例中,您正在迭代字典.而在关键的,您使用get此方法.

方法get()返回给定键的值.如果key不可用,则返回默认值None.

在这里,方法中没有参数,get它只是迭代字典的值.因此,min为您提供具有最小价值的钥匙.

因为max(enumerate(array_x), key=operator.itemgetter(1)) 我们想要比较数组的值而不是它们的索引.所以我们列举了数组.

枚举(thing),其中thing是迭代器或序列,返回将返回的迭代器(0,thing [0]),(1,thing 1),(2,thing [2])

现在我们使用itemgetter运算符模块的功能.operator.itemgetter(n)构造一个可调用的函数,它将一个可迭代对象(例如list,tuple,set)作为输入,并从中取出第n个元素.

你也可以使用这里的lambda函数

max(enumerate(array_x), key=lambda i: i[1])
Run Code Online (Sandbox Code Playgroud)

所以功能范围key几乎可以使用.我们可以使用许多功能,但唯一的动机是,它是比较的标准.