0

我需要对我的 django 查询集结果进行排序(前五个大值)

我按选择排序排序

def sortTopFive(allPois):                   # selection sort
    res=[]
    for i in range(0,4):
            large =allPois[i]
            for ele in range(i, len(allPois)):
                    if allPois[ele]['count']>=large['count']:
                            ele, large = large , ele
                    else :
                            continue
            res[i]=large
    return res

all[i]['count'] 是一个整数

我得到的错误是

'int' object is unsubscriptable

这个问题可能太愚蠢了,我是 python 新手

4

2 回答 2

0

为什么不在查询本身中这样做

例子

This will get them ordered by price for example desc
Module.objects.all().order_by("-price")

或者

#If you want to remove duplicates just do this
Module.objects.all().order_by("-price").distinct('price')
#or limit results to 5
Module.objects.all().order_by("-price").distinct('price')[:5]
于 2013-09-12T11:48:05.687 回答
0

这段代码有很多很多问题。一些明显的:

  • 交换ele并且large实际上并没有对列表做任何事情,它只是将名称重新绑定ele到以前的名称,large但是该名称随后会立即重新绑定到列表中的下一个元素;

  • res[i]会给你一个 IndexError 因为列表是空的;你可能想要做res.append(i)

但是,除非您将此作为算法学习练习,否则我根本不知道您为什么要这样做。Python 有一个非常好的内置sort()函数,它比你的代码效率高很多倍 - 最重要的是,Django 的查询集本身支持直接在数据库中排序,这甚至更好。

于 2013-09-12T11:45:10.983 回答