[英]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.