You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何将模型查询结果各字段值分别提取存入对应独立列表

Django 3.x QuerySet 转字段聚合字典最优方案

方案1:ORM查询阶段直接生成(性能最优,优先推荐)

直接通过values_list取指定字段的值序列,利用Python解压+打包特性一步生成目标格式,无需额外遍历字典结构:

# 定义你需要提取的字段列表
fields = ["id", "author", "price", "category", "available"]
# 查询并直接转换:*解压所有行的元组,zip按列合并,最终和字段名配对生成字典
result = dict(zip(fields, map(list, zip(*Book.objects.values_list(*fields)))))

该方案优势:

  • 仅执行1次数据库查询,无多余的中间字典生成步骤
  • 时间复杂度为O(n),是所有方案中性能最高的实现,适合数据量较大的场景
  • 可灵活指定需要的字段,避免查询不需要的字段浪费内存和IO

方案2:已有values()查询结果时的转换方案

如果你已经获取到book_details = Book.objects.all().values()的结果,可以用Python标准库defaultdict实现转换:

from collections import defaultdict

result = defaultdict(list)
# 遍历一次QuerySet即可完成所有字段的聚合
for row in book_details:
    for key, value in row.items():
        result[key].append(value)
# 若需要转为普通字典,执行以下代码即可
result = dict(result)

该方案优势:

  • 适配已拿到values()结果的场景,代码可读性高
  • 仅遍历一次QuerySet,时间复杂度同样为O(n),性能优秀
  • 无需提前指定字段名,会自动聚合所有返回的字段

补充说明:如果查询结果可能为空,建议先判断book_details是否为空再执行转换,避免取字段时报错。

内容的提问来源于stack exchange,提问作者kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:06:03