获取查询中元素的索引

2024-05-13 06:03:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个QuerySet,我们称它为qs,它是由一些与这个问题无关的属性排序的。然后我有一个对象,我们称它为obj。现在我想知道objqs中有什么索引,尽可能有效地。我知道我可以使用Python中的.index(),或者可能通过qs循环,将每个对象与obj进行比较,但是最好的方法是什么?我正在寻找高性能,这是我唯一的标准。

在Windows上使用Python2.6.2和Django1.0.2。


Tags: 对象方法obj标准index属性排序windows
3条回答

紧凑,可能是最有效的:

for index, item in enumerate(your_queryset):
    ...

如果您只想知道您的对象在所有其他对象中的位置(例如,在确定排名时),可以通过在您之前计算对象来快速完成:

    index = MyModel.objects.filter(sortField__lt = myObject.sortField).count()

Django中的queryset实际上是生成器,而不是列表(有关更多详细信息,请参见Django documentation on QuerySets)。
因此,获取元素索引没有捷径,我认为简单的迭代是最好的方法。

对于starter,我将以尽可能简单的方式实现您的需求(比如迭代);如果您真的有性能问题,那么我将使用一些不同的方法,比如用较少的字段构建一个queryset,或者其他什么方法。
在任何情况下,我们的想法都是在你明确知道自己需要这些技巧的时候,尽可能晚地留下这些技巧。
更新:您可能需要直接使用一些SQL语句来获取行数(有些是谎言)。但是,Django的ORM本身不支持这种方法,因此必须使用原始SQL查询(请参见documentation)。我认为这可能是最好的选择,但再次-如果你真的看到一个真正的性能问题。

相关问题 更多 >