簡體   English   中英

限制排序方法的輸出

[英]limit output from a sort method

如果我的意見代碼是:

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)

那么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]

您可能會發現切片適合您:

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

你想要什么總的想法是一個take ,我相信。 itertools文檔中

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

我想我幾乎在吠錯樹。 我試圖完成的工作實際上是使用模板過濾器(切片)非常簡單,而我不知道該怎么做。 代碼如下:

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

是的,我覺得自己很愚蠢,但是我很高興我完成了:-)

您可能還想將[:50]添加到每個objects.order_by.filter調用中。 這樣做將意味着您只需要在Python中對150個內存項進行排序,而不是可能要排序更多項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM