如何在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*** The minimum value in the dictionary is {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()解决方案通过将字典“反转”为(值,键)对的序列来解决该问题。在对此类元组执行比较时,首先比较值元素,然后再比较键。

这给了我们确切想要的行为,并允许使用单个语句轻松地对字典内容执行归约和排序。

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.Similarly,排名数据,利用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(),如果碰巧有重复的值,则将返回具有最小或最大键的条目。这就是为什么我们选择标题最大的玩家时,最终只会得到一个值为Nadal的值的原因(请参见步骤7输出)。