理解Python字典上的max函数操作

时间:2017-06-15 11:38:06

标签: python dictionary functional-programming max

我试图了解Python字典上max函数的操作。以下是我正在使用的代码:

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 Talk中获取了代码:https://youtu.be/EnSu9hHGq5o?t=12m42s

3 个答案:

答案 0 :(得分:2)

#3的工作方式是,"dependencies": { "@uirouter/angularjs": "latest", "@uirouter/visualizer": "latest", } 提供的方法只会查找key字典中的值。因此,对于正在迭代的每个tall_buildings,相应的key将由value提供。

get方法与get运算符

同义
[]

#3首先在键上循环的原因是,默认情况下,迭代>>> tall_buildings['Sears Tower'] 442 >>> tall_buildings.get('Sears Tower') 442 将遍历仅键

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()对的元组。

答案 1 :(得分:1)

max()函数在第一个参数上迭代,将键函数应用于每个项目并选择具有最大键的项目。

迭代字典与迭代字符串相同。执行时

max(tall_buildings, key=tall_buildings.get)

我们将首先遍历tall_buildings中的所有密钥。对于每个键k,将评估键函数tall_buildings.get(k),其返回由k表示的建筑物的高度。然后将选择并返回具有最大高度的k

答案 2 :(得分:1)

max的概念需要定义订购项目。

所以在这里提供key参数就像对sort一样:一个函数应用于字典的每个元素,以便将(key, val)对映射到值具有内置的排序定义(例如数字,字符串)。因此,您将找到映射值的最大值,结果将是原始字典中的相应元素。