如何在 Python 中使用字典进行计算?

pythonserver side programmingprogramming更新于 2026/2/15 3:56:17

问题

您想要对数据字典执行各种计算(例如,最小值、最大值、排序等)。

解决方案。

我们将创建一个包含网球运动员及其大满贯头衔的字典。

PlayerTitles = {
   'Federer': 20,
   'Nadal': 20,
   'Djokovic': 17,
   'Murray': 3,
   'Theim' : 1,
   'Zverev': 0
}

1.我们有一个字典,里面有球员姓名和每个球员赢得的大满贯冠军。现在让我们试着找出拥有最少冠军头衔的球员

#type(PlayerTitles)
print(f"Output \n*** The minimum value in the dictionary is {min(PlayerTitles)} ")

输出

*** The minimum value in the dictionary is Djokovic

2.这可能不是我们想要的,因为我们实际上试图执行涉及字典值的计算。因此,让我们尝试使用字典的 values() 方法修复此问题。

print(f"Output \n*** 字典中的最小值为 {min(PlayerTitles.values())} ")

输出

*** The minimum value in the dictionary is 0

3. 不幸的是,这通常也不是您想要的。例如,您可能想知道有关相应键的信息,即拥有最少头衔的玩家姓名。

4. 如果为 min() 和 max() 提供键函数,则可以获取与最小值或最大值相对应的键。

print(f"Output \n***{min(PlayerTitles, key=lambda k: PlayerTitles[k])} ")

输出

***Zverev

5. 但是,要获得最小值,您需要执行额外的查找。

min_titles = PlayerTitles[min(PlayerTitles, key=lambda k: PlayerTitles[k])]
print(f"Output \n***{min_titles} ")

输出

***0

6. 涉及 zip() 的解决方案通过将字典"反转"为 (value, key) 对序列来解决问题。在对此类元组进行比较时,首先比较值元素,然后比较键。

这给了我们所需的行为,并允许使用单个语句轻松地对字典内容执行缩减和排序。

min_titles = min(zip(PlayerTitles.values(), PlayerTitles.keys()))
max_titles = max(zip(PlayerTitles.values(), PlayerTitles.keys()))

print(f"Output \n***{min_titles , max_titles} ")

输出

***((0, 'Zverev'), (20, 'Nadal'))

7.同样,要对数据进行排序,请使用 zip() 和 sorted()

titles_sorted = sorted(zip(PlayerTitles.values(), PlayerTitles.keys()))
print(f"Output \n***{titles_sorted} ")

输出

***[(0, 'Zverev'), (1, 'Theim'), (3, 'Murray'), (17, 'Djokovic'), (20, 'Federer'), (20, 'Nadal')]

8.进行这些计算时,请注意 zip() 会创建一个只能使用一次的迭代器。

titles_and_players = zip(PlayerTitles.values(), PlayerTitles.keys())
print(f"Output \n***{min(titles_and_players)} ")

输出

***(0, 'Zverev')

9. 如果我们尝试再次调用它,我们将面临一个空序列异常。

10. 需要注意的是,在涉及(值,键)对的计算中,如果多个条目恰好具有相同的值,则将使用键来确定结果。

例如,在 min() 和 max() 等计算中,如果恰好有重复的值,则将返回具有最小或最大键的条目。这就是当我们选择拥有最多头衔的球员时,我们最终只得到一个值,即纳达尔的原因。(参见步骤 7 输出)。


相关文章


有用资源