限制排序方法的输出
如果我的视图代码是:
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]