我正在学习Python,我有以下问题,我必须得到字典中值最高的项目。
verse_dict = {'if': 3, 'you': 6, 'can': 3, 'keep': 1, 'your': 1, 'head': 1, 'when': 2, 'all': 2, 'about': 2, 'are': 1, 'losing': 1, 'theirs': 1, 'and': 3, 'blaming': 1, 'it': 1, 'on': 1, 'trust': 1, 'yourself': 1, 'men': 1, 'doubt': 1, 'but': 1, 'make': 1, 'allowance': 1, 'for': 1, 'their': 1, 'doubting': 1, 'too': 3, 'wait': 1, 'not': 1, 'be': 1, 'tired': 1, 'by': 1, 'waiting': 1, 'or': 2, 'being': 2, 'lied': 1, 'don\'t': 3, 'deal': 1, 'in': 1, 'lies': 1, 'hated': 1, 'give': 1, 'way': 1, 'to': 1, 'hating': 1, 'yet': 1, 'look': 1, 'good': 1, 'nor': 1, 'talk': 1, 'wise': 1}
试试这个max(verse_dict.values())
返回值,但我不知道如何得到它key
可能的答案
这段代码对我有用,但如果有什么方法可以让它更高效,我想知道。
result, val = 0, ''
for i, j in verse_dict.items():
if result < j:
result = j
val = i
print(val)
该函数
max()
比看起来更强大和更通用,这要归功于key
函数可以通过其参数传递,根据该参数选择最大值。发生的情况是,它将
max()
将该函数应用于您试图获得最大值的可迭代的每个元素,并且它将保留函数返回的结果可能最大的那个。我们可以通过以下方式使用它。首先,您将
verse_dict.items()
作为可迭代对象传递给函数max()
。如您所知,这将产生一个迭代,其中每个元素都是一个 tuple(clave, valor)
。在不使用可选参数的情况key
下,max()
它会将这些元组中的每一个相互比较,以保持“最大”的一个。如果一个元组的第一个元素更大,则一个元组大于另一个(如果它相等,那么它将查看第二个)。这对我们不起作用,因为结果元组将是在 中具有最大值的元组clave
,而不是在valor
.但是如果我们分配给
key
一个返回元组第二个元素的函数,那么最大值将基于第二个元素计算。在这种情况下,结果值将(clave, valor)
是valor
最大值。需要传递给它的函数就像这样简单:
因此我们可以
max()
通过以下方式调用max(verse_dict.items(), key=obtener_valor)
。结果将是最大的元(clave, valor)
组valor
。只需保留密钥:de la 的事情
lambda
只是一种让自己免于编写单独的函数并为其命名的方法。当你需要写的函数非常简单,只包含一个return
时,你可以在lambda
需要的地方写成:在这种情况下,lambda 接收一个参数
x
,它将是 中的每个元素verse_dict.items()
,并将返回x[1]
,即它的值。请注意,lambda
不是 putreturn
,而只是您要返回的表达式。奖金
必须编写 lambda 来保留元组元素的事实是如此普遍,以至于 Python 标准库为此提供了一个函数,这对于 、 或 函数非常有用
max()
,min()
所有sort()
这些都允许key
基于该参数进行比较。在模块
operator
中,您拥有itemgetter()
作为参数传递给您想要的元组的哪个元素的函数,它返回另一个您可以使用的函数,而不是 lambda。该返回的函数将依次接收一个元组并从中返回所需的元素。例如:
更简单的版本
ChemaCortes提出了以下解决方案,甚至更简单:
我必须说我正在考虑类似的事情,但我找不到它,谢谢 Chema!
这个案例是如何运作的?我们
max()
传递verse_dict
给 ,而不是verse_dict.items()
,所以这次max
它只会遍历键列表,而不是 的列表(clave,valor)
。因此,结果将直接成为键,从而避免了将 应用于[0]
结果。对于字典中的每个键,
max
它将调用参数中指定的函数key
。因此,获得的第一个键将应用verse_dict.get(primera_clave)
,因此您将获得它的值。每个键也是如此。由于在比较中使用的是这些值,因此最终结果将是值为最大值的键。