你写的代码是
my_dict = {'a':2,'b':1}
min(my_dict, key=my_dict.get)
其实这个工作在min
功能。 那么,min做什么?
min(a, b, c, ...[, key=func]) -> value
有了一个迭代参数,返回它的最低项目。使用两个或更多个参数,返回最低的参数。
这里的关键是用来传递一个自定义的比较函数。
示例:输出最大长度列表,其中arg1,arg2都是列表。
>>>> max([1,2,3,4], [3,4,5], key=len)
[1, 2, 3, 4]
但如果我想从列表中最高,但考虑的元组的第二个元素?这里我们可以使用官方的documentation中给出的函数。 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)
所以函数基本上依赖于可迭代和通过比较的标准。
现在在你的例子中,你正在迭代你的字典。并在键,您在这里使用get
方法。
get()方法返回给定键的值。如果密钥不可用,则返回默认值无。
由于在这里,没有参数在get
方法,它只是迭代字典的值。因此,min
为您提供最低价值的关键。
对于max(enumerate(array_x), key=operator.itemgetter(1))
我们想比较数组的值而不是索引。所以我们列举了这个数组。
枚举(事),其中一点是任一个迭代或序列,返回一个迭代器将返回(0,东西[0]),(1,一点1),(2,事[2] )
现在我们已经使用操作模块的itemgetter
功能。 operator.itemgetter(n)
构造了一个可调用的对象,它将一个可迭代的对象(例如,列表,元组,集合)作为输入,并从中取出第n个元素。
你也可以使用这里的lambda函数像
max(enumerate(array_x), key=lambda i: i[1])
所以的功能key
范围几乎达到使用。我们可以使用许多功能,但唯一的动机是,这是比较的标准。
据我所知,我的问题与lambda函数没有直接关系(尽管我明白lambda可以用作关键字函数)。 – DanGoodrick