2017-06-15 25 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)双于具有内置排序定义的值(如数字,字符串地图)。因此,您会发现映射的值的最大值,结果将是原始字典中的相应元素。