2017-06-15 24 views
3

我想了解Python字典上max函數的操作。以下是我使用的代碼:瞭解Python字典上的最大功能操作

tall_buildings = { 
    "Empire State": 381, "Sears Tower": 442, 
    "Burj Khalifa": 828, "Taipei 101": 509 
} 


# 1. find the height of the tallest building 
print("Height of the tallest building: ", max(tall_buildings.values())) 


# 2. find the name, height pair that is tallest 
print(max(tall_buildings.items(), key=lambda b: b[1])) 


# 3. find the tallest building 
print(max(tall_buildings, key=tall_buildings.get)) 

上述所有的打印報表提供了正確的結果在代碼中的註釋說明。

我明白#1#2是如何工作的。

1:tall_buildings.values()給出高度流max函數返回高度的最大值。

2:tall_buildings.items()給出的(名字,高度)對流和max函數返回基於key=pair's height.

一對不過,我很難理解如何# 3作品。 key=tall_buildings.get如何成爲尋找最高建築物的關鍵?

我已經採取了代碼Ned的PYCON講座:https://youtu.be/EnSu9hHGq5o?t=12m42s

+0

dict.get方法接受一個鍵並返回相關的值。因此,max函數將會遍歷字典中的所有條目,並將該對與最大高度關聯起來。 – user452570

回答

1

max()函數在其第一個參數上迭代,將鍵功能應用於每個項目並選擇具有最大鍵的項目。

對字典的迭代與迭代其中的鍵是一樣的。執行時

max(tall_buildings, key=tall_buildings.get) 

我們將首先遍歷tall_buildings中的所有密鑰。對於每個鍵k,將評估關鍵功能tall_buildings.get(k),其返回由k表示的建築物的高度。然後選擇並返回具有最大高度的k

2

是#3作品是作爲key提供的方法將簡單地查找從tall_buildings字典價值的方式。因此,對於每個key正在迭代,相應的value將由get提供。

get方法與[]操作者同義

>>> tall_buildings['Sears Tower'] 
442 
>>> tall_buildings.get('Sears Tower') 
442 

原因#3上循環在第一位置的鑰匙,是通過在dict將循環缺省迭代過只有鑰匙

for i in tall_buildings: 
    print(i) 

Taipei 101 
Empire State 
Burj Khalifa 
Sears Tower 

你也可以遍歷明確的鑰匙

for i in tall_buildings.keys(): 
    print(i) 

Taipei 101 
Empire State 
Burj Khalifa 
Sears Tower 

類似地,您可以遍歷.values(),它們只是字典中的值或.items(),它們在(key,value)對的元組上循環。

+0

但我們沒有把鑰匙給那裏,是嗎? – harshil9968

+3

@ harshil9968迭代字典與遍歷其中的鍵相同。 –

+0

是每次傳遞給tall_buildings.get這個字典的鍵的參數嗎? –

1

max的概念需要定義訂購的項目。

所以在這裏你提供key參數就像你會做sort:功能應用到字典中的每個元素,以便將(key, val)雙於具有內置排序定義的值(如數字,字符串地圖)。因此,您會發現映射的值的最大值,結果將是原始字典中的相應元素。