moh*_*666 2 python django list-comprehension list django-queryset
我正在尝试调整速度部门遇到的应用程序.因此,我已经开始将所有for-loop语句转换为列表推导.
目前,我正在研究一个需要遍历Django查询集字典的函数.旧代码使用for循环语句来迭代这个并且它工作正常.我使用列表推导的代码返回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'>
Run Code Online (Sandbox Code Playgroud)
请注意,get_data_map返回值为的字典 <class 'django.db.models.query.QuerySet'>
这部分代码是应用程序中最耗时的部分之一.如果我将这个工作放在列表推导上,那么应用程序的速度有望提高两倍.
知道如何加快这部分代码的速度吗?
你的问题不是for循环与列表理解(更好的是生成器).您的问题是对数据库的查询过多.
由于您尝试获取一个列表,因此您应该尝试从一个查询中获取它.如果您解释了典型QuerySet中的内容,我们可以向您展示如何最好地合并它们.也许OR在Q对象上使用合并.或者可能构建一组整数并将其提供给__in=过滤器.
| 归档时间: |
|
| 查看次数: |
5687 次 |
| 最近记录: |