限制排序方法的输出

0 投票
5 回答
5479 浏览
提问于 2025-04-15 13:03

如果我的视图代码是:

arttags = sorted(arttags, key=operator.attrgetter('date_added'), reverse=True)

那么有什么参数可以把结果限制在50个标签内呢?

我假设这个:

.... limit=50)

是不对的。

接下来是更完整的代码:

videoarttags = Media.objects.order_by('date_added'),filter(topic__exact='art') 
audioarttags = Audio.objects.order_by('date_added'),filter(topic__exact='art') 
conarttags = Concert.objects.order_by('date_added'),filter(topic__exact='art') 
arttags = list(chain(videoarttags, audioarttags, conarttags)) 
arttags = sorted(arttags, key=operator.attrgetter('date_added'), reverse=True) 

我该如何加入 –

itertools.islice(sorted(...),50)

5 个回答

0

你想要的基本概念是一个叫做 take 的东西,我觉得。可以参考一下 itertools 的文档

def take(n, iterable):
    "Return first n items of the iterable as a list"
    return list(islice(iterable, n))
3

你可能会发现,使用切片(slice)对你来说很合适:

arttags = sorted(arttags, key=operator.attrgetter('date_added'), reverse=True)[:50]
4

关于 heapq.nlargest,它的作用是:
从一个可迭代的数据集中返回最大的 n 个元素。如果你提供了一个 key 参数,它会指定一个函数,这个函数接受一个参数,用来从可迭代对象中的每个元素提取出一个用于比较的关键字。比如说:key=str.lower 相当于: sorted(iterable, key=key, reverse=True)[:n]

>>> from heapq import nlargest
>>> data = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
>>> nlargest(3, data)
[9, 8, 7]

撰写回答