d.get
方法(?)非常有效地让我在返回密钥时找到字典中值的最大值。但我似乎无法理解或找到有关d.get
如何运作的任何解释。据我所知:max()
迭代iterable
并返回最大值的迭代。当迭代dict
时,这默认为评估max
key
。
我的困惑来自d.get
和d.get(key)
之间的区别。如何在没有()
的情况下调用方法?我不确定如何调查此事。
foo = max(d, key = d.get)
weights = {
95: 0.0,
96: 0.0,
97: 0.30793650793650795,
98: 0.0,
99: 0.0,
100: 0.0,
101: 0.48095238095238096,
102: 0.0,
103: 0.0,
104: 0.49523809523809526,
105: 0.0}
heaviest = max(weights, key = weights.get)
--> 104
使用max()
的可选参数,可以按value
排序并返回key
。我只是不明白什么被分配给key
论点。
谢谢大家。
weights.get
是一个函数,它返回weights
中相应键的值。当max
查找最大值时,它使用key
参数的返回值,将输入作为参数传递。
这段代码:
heaviest = max(weights, key=weights.get)
相当于:
heaviest = max(weights, key=lambda k: weights.get(k))
甚至更明确地:
def fetchVal(key):
return weights.get(key) # same as weights[key]
heaviest = max(weights, key=fetchVal)
当你将weights
传递给max
时,它会迭代字典的键。基本上,与max(weights, key=weights.get)
,你说:给我weights
的最大关键;但是,不是使用键本身的值来确定最大值,而是使用weights
中的相应值。
d.get(k)
只返回密钥k
的字典中的值。
迭代字典时,迭代器返回字典键。因此,对于每个字典,max
调用d.get(key)
来获取相互比较的值。相当于d[key]
,因此它返回相应的字典元素。
最后,max
返回与所有这些值的最大值对应的键。
您提供的代码相当于:
foo = max(d, key = lambda k: d[k])
它不像max函数“key =”参数那样使用get方法,它将函数作为参数。当你告诉它max(my_dict,key = my_dict.get)
它迭代my_dict的键,将每个字典键传递给key =参数中给出的函数。并返回函数输出最高的键。
max(my_dict, key=lambda k:my_dict[k])
也会这样做。