我试图了解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
答案 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)
对映射到值具有内置的排序定义(例如数字,字符串)。因此,您将找到映射值的最大值,结果将是原始字典中的相应元素。