0

如果我的意见代码是:

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)
4

5 回答 5

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]
于 2009-07-22T01:26:51.553 回答
2

您可能会发现切片适合您:

arttags = sorted(arttags, key=operator.attrgetter('date_added'), reverse=True)[:50]
于 2009-07-21T22:50:21.110 回答
0

我想我几乎是在叫错树了。我试图完成的实际上非常简单,使用模板过滤器(切片),我不知道我能做到。代码如下:

{% for arttag in arttags|slice:":50" %}

是的,我觉得自己很愚蠢,但我很高兴我完成了它:-)

于 2009-07-25T03:48:12.557 回答
0

您可能还想在每个objects.order_by.filter调用中添加 [:50]。这样做意味着你只需要在 Python 中对内存中的 150 个项目进行排序,而不是可能更多。

于 2009-07-25T04:25:50.857 回答
0

take我相信,您想要的总体思路是 a 。从itertools 文档

def take(n, iterable):
    "Return first n items of the iterable as a list"
    return list(islice(iterable, n))
于 2009-07-21T23:08:20.950 回答