如何通过单次循环从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
相关产品推荐
相关产品推荐

