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

如何通过单次循环从QuerySet生成两个字典?

优化字典生成:一次循环创建两个字典

你现在的代码两次遍历vehicle_category.types.all()来生成两个字典,虽然因为提前用了prefetch_related,数据已经加载到内存,不会重复查询数据库,但确实可以优化成一次遍历同时生成两个字典,减少循环开销的同时让代码更简洁。

优化后的单循环实现

直接初始化两个空字典,遍历一次类型集合,同时填充两个字典:

booking_data = {}
vehicle_type_mapping = {}
for vehicle_type in vehicle_category.types.all():
    booking_data[vehicle_type] = 0
    vehicle_type_mapping[vehicle_type.id] = vehicle_type

结合上下文的完整代码

把这个逻辑放到你的循环里,最终代码如下:

for vehicle_category in VehicleCategory.objects.prefetch_related('types').order_by('name'):
    booking_data = {}
    vehicle_type_mapping = {}
    for vehicle_type in vehicle_category.types.all():
        booking_data[vehicle_type] = 0
        vehicle_type_mapping[vehicle_type.id] = vehicle_type
    completed_booking_data[vehicle_category] = booking_data

为什么这样更高效

  • 避免了两次遍历同一数据集的冗余操作,尤其是当types的数量较多时,能减少不必要的循环计算
  • 代码逻辑更紧凑,可读性更强
  • 依然保留prefetch_related的优势,不会触发额外的数据库查询,所有数据都从内存中读取

内容的提问来源于stack exchange,提问作者Andi Fathul Mukminin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:15:27