如何在 Python 中使用字典进行计算?
问题
您想要对数据字典执行各种计算(例如,最小值、最大值、排序等)。
解决方案。
我们将创建一个包含网球运动员及其大满贯头衔的字典。
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 输出)。
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

