如果我的观看代码是:
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)
答案 0 :(得分:3)
heapq.nlargest怎么样:
返回包含iterable.key定义的数据集中n个最大元素的列表(如果提供),指定一个参数的函数,该函数用于从iterable中的每个元素中提取比较键:key=str.lower Equivalent to: 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]
答案 1 :(得分:2)
您可能会发现切片适合您:
arttags = sorted(arttags, key=operator.attrgetter('date_added'), reverse=True)[:50]
答案 2 :(得分:0)
我相信你想要的一般概念是take
。来自the itertools documentation:
def take(n, iterable):
"Return first n items of the iterable as a list"
return list(islice(iterable, n))
答案 3 :(得分:0)
我认为我差点在错误的树上咆哮。我试图完成的实际上非常简单,使用模板过滤器(切片),我不知道我能做什么。 代码如下:
{% for arttag in arttags|slice:":50" %}
是的,我感觉非常愚蠢,但我很高兴我完成了它:-)
答案 4 :(得分:0)
您可能还想为每个objects.order_by.filter
电话添加[:50]。这样做意味着您只需要在Python中对150个内存进行排序,而不是可能更多。