想澄清 heapq.nlargest 参数 'key'
Would like clarification on the heapq.nlargest parameter 'key'
下面的函数returns 数组中的前 k 个元素。它为数组中的每个唯一元素分配一个频率,并将数据添加到 numbers
字典。
个数:
{1: 3, 2: 2, 3: 1}
我对 heapq.nlargest(k, numbers.keys(), key=numbers.get)
部分感到困惑;可迭代参数 numbers.keys()
和关键参数 numbers.get
究竟是如何被利用的?
我明白 heapq.nlargest()
将 numbers.keys()
转换为最大堆结构,但我很困惑为什么具体是 numbers.keys()
而不仅仅是 numbers
?
最后,为什么使用的是关键参数numbers.get
?
def topKFrequent(self, nums, k):
numbers = {}
for n in nums:
if n in numbers: numbers[n] += 1
else: numbers[n] = 1
return heapq.nlargest(k, numbers.keys(), key=numbers.get)
我正在尝试理解这一点:
heapq.nlargest(n, iterable[, key])
Return a list with the n largest elements from the dataset defined by
iterable. key, if provided, specifies a function of one argument that
is used to extract a comparison key from each element in the iterable:
key=str.lower Equivalent to: sorted(iterable, key=key,
reverse=True)[:n]
我们来分解一下:
heapq.nlargest(k, numbers.keys(), key=numbers.get)
此代码将遍历 numbers.keys()
,因此遍历字典的键 numbers
。它们将根据键函数 numbers.get
进行排序,其中 returns 与每个键关联的值。
这意味着您将从 numbers
中获取对应于 k
个最大值的键。
正如@ShadowRanger 在他们的评论中指出的那样,您还可以使用:
heapq.nlargest(k, numbers, key=numbers.get)
因为迭代字典实际上是迭代它的键。
下面的函数returns 数组中的前 k 个元素。它为数组中的每个唯一元素分配一个频率,并将数据添加到 numbers
字典。
个数:
{1: 3, 2: 2, 3: 1}
我对 heapq.nlargest(k, numbers.keys(), key=numbers.get)
部分感到困惑;可迭代参数 numbers.keys()
和关键参数 numbers.get
究竟是如何被利用的?
我明白 heapq.nlargest()
将 numbers.keys()
转换为最大堆结构,但我很困惑为什么具体是 numbers.keys()
而不仅仅是 numbers
?
最后,为什么使用的是关键参数numbers.get
?
def topKFrequent(self, nums, k):
numbers = {}
for n in nums:
if n in numbers: numbers[n] += 1
else: numbers[n] = 1
return heapq.nlargest(k, numbers.keys(), key=numbers.get)
我正在尝试理解这一点:
heapq.nlargest(n, iterable[, key])
Return a list with the n largest elements from the dataset defined by iterable. key, if provided, specifies a function of one argument that is used to extract a comparison key from each element in the iterable: key=str.lower Equivalent to: sorted(iterable, key=key, reverse=True)[:n]
我们来分解一下:
heapq.nlargest(k, numbers.keys(), key=numbers.get)
此代码将遍历 numbers.keys()
,因此遍历字典的键 numbers
。它们将根据键函数 numbers.get
进行排序,其中 returns 与每个键关联的值。
这意味着您将从 numbers
中获取对应于 k
个最大值的键。
正如@ShadowRanger 在他们的评论中指出的那样,您还可以使用:
heapq.nlargest(k, numbers, key=numbers.get)
因为迭代字典实际上是迭代它的键。