a = dict(((1,3),(0,-1),(3,21)))
m = max(a, key=a.get)
有人能給我一個解釋,爲什麼這會返回對應最大值的鍵?它困擾了我很長一段時間。謝謝!python字典中對應最大值的鍵
a = dict(((1,3),(0,-1),(3,21)))
m = max(a, key=a.get)
有人能給我一個解釋,爲什麼這會返回對應最大值的鍵?它困擾了我很長一段時間。謝謝!python字典中對應最大值的鍵
字典「a」是python中的一個可迭代結構。當您循環訪問for x in a
時,您正在循環查看字典中的鍵。
在第二行中,max函數接受兩個參數:一個可迭代對象(a)和一個可選的「key」函數。 Key函數將用於評估a中物品的價值 - 其中最大的將返回。
例子:
>>> a = dict(((1,3),(0,-1),(3,21)))
>>> for x in a:
... print x #output the value of each item in our iteration
...
0
1
3
注意這裏只有 「鑰匙」 是輸出。當我們將這些密鑰中的每一個傳遞給「獲得」時...
>>> a.get(0)
-1
>>> a.get(1)
3
>>> a.get(3)
21
我們得到每個密鑰的值。現在看看max是如何工作的。
>>> b=[2, 3, 5, 6, 4]
>>> max(b)
6
>>> def inverse(x):
... return 1.0/x
...
>>> max(b, key=inverse)
2
正如你所看到的,max(默認)只會在我們的迭代列表中找到最大的數字。如果我們定義「反向」函數,它將返回b中最大的項目,其中inverse(item)
是最大的項目。
結合這兩項,我們看到max(a, key=a.get)
將返回a
中的item
,其中值a.get(item)
是最大的。即對應於最大值的密鑰。
你問的key
參數是如何工作的?它需要一個可調用的,它應用於字典中的每個元素。在你的字典的情況下,它只是做到這一點:
a.get(1) # 3
a.get(0) # -1
a.get(3) # 21
max
然後使用功能鍵作爲比較值的結果,因此它顯然會選擇返回最高值的元素,即3
如果你真的感興趣,你也可以嘗試使用lambda函數:'max(a,key = lambda x:a [x])' – ProdigySim