你写的代码是
my_dict = {'a':2,'b':1}
min(my_dict, key=my_dict.get)
实际上这适用于min
功能。
那么,min 做什么呢?
min(a, b, c, ...[, key=func]) -> value
使用单个可迭代参数,返回其最低的项目。对于两个或多个参数,返回最低的参数。
这里的关键是用来传递一个自定义的比较函数。
示例:按列表长度输出 max,其中 arg1、arg2 都是列表。
>>>> max([1,2,3,4], [3,4,5], key=len)
[1, 2, 3, 4]
但是,如果我想要列表中的最大值,但要考虑元组的第二个元素,该怎么办?这里我们可以使用官方给出的函数文档. The 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)
因此,函数基本上取决于可迭代和传递比较标准。
现在,在您的示例中,您正在迭代字典。并且在key, 您正在使用get
方法在这里。
get() 方法返回给定键的值。如果密钥不可用,则返回默认值 None。
在这里,没有任何争论get
方法它只是迭代字典的值。因此min
为您提供具有最小值的密钥。
For max(enumerate(array_x), key=operator.itemgetter(1))
我们想要比较数组的值而不是它们的索引。这样我们就枚举了数组。
enumerate(thing),其中 thing 是迭代器或序列,返回一个迭代器,该迭代器将返回 (0, thing[0]), (1, thing1), (2, 事物[2])
现在我们已经使用了itemgetter
的函数operator模块。operator.itemgetter(n)
构造一个可调用对象,假设一个可迭代对象(例如列表、元组、集合)作为输入,并从中取出第 n 个元素。
您还可以使用这里的 lambda 函数,例如
max(enumerate(array_x), key=lambda i: i[1])
所以函数的范围在key
差不多就可以使用了。我们可以使用许多函数,但唯一的动机是,它是比较的标准。