Python 限制排序方法的输出
如果我的视图代码为:Python 限制排序方法的输出,python,django,itertools,Python,Django,Itertools,如果我的视图代码为: 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.ob
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)
您可能会发现切片适合您:
arttags = sorted(arttags, key=operator.attrgetter('date_added'), reverse=True)[:50]
您可能会发现切片适合您:
arttags = sorted(arttags, key=operator.attrgetter('date_added'), reverse=True)[:50]
我相信,你想要的是一个
接受。发件人:
我相信,你想要的是一个接受。发件人:
关于:
返回由iterable定义的数据集中n个最大元素的列表。key(如果提供)指定一个参数的函数,用于从iterable中的每个元素提取比较键: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]
关于:
返回由iterable定义的数据集中n个最大元素的列表。key(如果提供)指定一个参数的函数,用于从iterable中的每个元素提取比较键: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]
我想我是找错人了。我试图实现的实际上是非常简单的使用模板过滤器(切片),我不知道我能做到。
守则如下:
{% for arttag in arttags|slice:":50" %}
是的,我觉得自己很蠢,但我很高兴我完成了:——)我想我是找错人了。我试图实现的实际上是非常简单的使用模板过滤器(切片),我不知道我能做到。
守则如下:
{% for arttag in arttags|slice:":50" %}
是的,我觉得自己很愚蠢,但我很高兴我完成了:-)您可能还希望向每个对象.order\u by.filter
调用添加[:50]。这样做意味着您只需在Python中对内存中的150个项目进行排序,而不必再对更多的项目进行排序。您可能还需要向每个对象.order\u by.filter
调用添加[:50]。这样做意味着您只需在Python中对内存中的150个项目进行排序,而不必对更多的项目进行排序。sorted()不是itertools过滤器——它返回一个简单的列表,而不是迭代器My Error。在前一行代码中,我使用itertools将一组标记链接到“arttags”中。我错误地认为我也在使用itertools排序过滤器。@kjarsenal,不可能以面向流的方式进行排序:在看到所有传入项之前,您甚至无法生成第一个结果项(因为您看到的最后一个可能是第一个生成的项!),当然,itertools只做面向流的事情。排序过滤器可以工作。我只需要知道如何限制结果。sorted()不是一个itertools过滤器——它返回一个简单的列表,而不是迭代器my error。在前一行代码中,我使用itertools将一组标记链接到“arttags”中。我错误地认为我也在使用itertools排序过滤器。@kjarsenal,不可能以面向流的方式进行排序:在看到所有传入项之前,您甚至无法生成第一个结果项(因为您看到的最后一个可能是第一个生成的项!),当然,itertools只做面向流的事情。排序过滤器可以工作。我只需要知道如何限制结果。是的,我也这么认为,但没有效果。这在什么方面不起作用?如果您提到itertools,如果您想要一个迭代器,请尝试itertools.islice(排序(…),50)
代码如下:videoarttags=Media.objects.order\u by('date\u added')、filter(topic\u exact='art')、audioarttags=Audio.objects.order\u by('date\u added')、filter(topic\u exact='art')、conarttags=conart=Concert.objects.order\u by('date\u added')、filter(topic_uuuexact='art')arttags=list(chain(videoarttags,audioarttags,conarttags))arttags=sorted(arttags,key=operator.attrgetter('date_uadded'),reverse=True)如何合并–itertools.islice(sorted(…),50)@kjarsenal,请编辑您的问题,将此代码放在那里(注释中的所有流程都不可读)为了修复问题的标题(因为itertools与排序无关)。是的,我也这么认为,但没有任何效果。这在什么方面不起作用?你提到itertools,如果你想要一个迭代器,请尝试itertools.islice(sorted(…),50)
代码看起来像这样:videoarttags=Media.objects.order\u by('date\u added'),filter(topic\uu-exact='art')audioarttags=Audio.objects.order\u by('date\u added')、filter(topic\uu-exact='art')conarttags=Concert.objects.order\u by('date\u added')、filter(topic\uu-exact='art')arttags=list(chain(videoarttags,audioarttags,conarttags))arttags=sorted=sorted(arttags,key=operater.attgetter('date\u added')、reverse如何合并–itertools.islice(sorted(…),50)@kjarsenal,请编辑您的问题,将此代码放在那里(无法阅读,全部在注释中流动),并修复问题的标题(因为itertools与sorted无关)。无法理解如何使用模块在django视图中实现它。无法理解如何使用模块在django视图中实现它。这可能是仅获取前几个排序元素的最快方法。这正是我所建议的。这可能是仅获取前几个排序元素的最快方法.这正是我的建议。