gpt4 book ai didi

python - 使用 Django QuerySets 时使用列表理解而不是 for 循环

转载 作者:行者123 更新时间:2023-11-28 20:27:59 24 4
gpt4 key购买 nike

我正在尝试调整一个在速度方面受到影响的应用程序。因此,我已经开始尽可能将所有 for 循环语句转换为列表理解。

目前,我正在开发一个需要遍历 Django 查询集字典的函数。旧代码使用 for-loop 语句来迭代它并且工作正常。我使用列表理解的代码返回 Django 查询集而不是我的模型对象。

代码如下:

def get_children(parent):
# The following works
children = []
for value in get_data_map(parent).itervalues():
children += list(value)
# This part doesn't work as intended.
booms = [value for value in get_data_map(parent).itervalues() if value]
import pdb
pdb.set_trace()


(Pdb) type(children[0])
<class 'site.myapp.models.Children'>

(Pdb) type(booms[0])
<class 'django.db.models.query.QuerySet'>

注意 get_data_map 返回一个值为 <class 'django.db.models.query.QuerySet'> 的字典

这部分代码是应用程序中最耗时的部分之一。如果我在列表理解上使用它,应用程序速度有望提高两倍。

知道如何加快这部分代码的速度吗?

最佳答案

您的问题不是 for 循环与列表理解(更好的是生成器)。您的问题是对数据库的查询过多

既然您正在尝试获取一个列表,那么您应该尝试从一个查询中获取它。如果您解释了典型 QuerySet 中的内容,我们可以向您展示如何最好地合并它们。也许对 Q 对象使用 OR 合并。或者可能构建一组整数并将其提供给 __in= 过滤器。

关于python - 使用 Django QuerySets 时使用列表理解而不是 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6714375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com