简体   繁体   English

Django从查询集列表创建列表

[英]django create list from a queryset list

I have a list of objects from a django queryset, eg 我有来自Django查询集的对象列表,例如

my_list = MyObject.objects.filter(variable=something)

MyObject has a field called year which is set to a particular year, eg 2005, 2007, 2009 MyObject具有一个称为year的字段,该字段设置为特定年份,例如2005、2007、2009

I want to take my_list and create a dictionary of years which holds all MyObject values for that year. 我想使用my_list并创建一个年份字典,其中包含该年份的所有MyObject值。 eg 例如

my_dict['2005'] = list of objects from my_list which match year = 2005
my_dict['2006'] = list of objects from my_list which match year = 2006
my_dict['2007'] = list of objects from my_list which match year = 2007
my_dict['2008'] = list of objects from my_list which match year = 2008

Can anyone tell me the best way of doing this. 谁能告诉我这样做的最好方法。 I already have the first bit sorted, eg getting my_list. 我已经对第一位进行了排序,例如获取my_list。 I just need it splitting down into years. 我只需要将它分解成几年。 I have attempted to write it myself but it became very inefficient with a lot of for loops and db queries 我尝试自己编写它,但是由于大量的for循环和db查询,它变得非常低效

Thanks 谢谢

import collections

mydict = collections.defaultdict(list)

for obj in my_list:
  mydict[obj.year].append(obj)

(Don't call the queryset 'my_list', it's not actually a list but a queryset. Call it something like 'my_objects'.) (不要将查询集称为“ my_list”,它实际上不是列表,而是查询集。将其称为“ my_objects”。)

my_dict = {}
for obj in my_objects:
    my_dict.setdefault(obj.year, []).append(obj)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM