你寫的代碼是
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