django从查询集列表中创建列表

时间:2010-04-13 15:09:22

标签: python django

我有一个来自django查询集的对象列表,例如

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

MyObject有一个名为year的字段,设置为特定年份,例如2005年,2007年,2009年

我想获取my_list并创建一个包含该年度所有MyObject值的年份字典。 e.g。

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

任何人都可以告诉我这样做的最佳方式。我已经对第一位进行了排序,例如获取my_list。我只需要分解成几年。我曾尝试自己编写它,但是对于很多for循环和数据库查询来说它变得非常低效

由于

2 个答案:

答案 0 :(得分:4)

import collections

mydict = collections.defaultdict(list)

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

答案 1 :(得分:1)

(不要调用查询集'my_list',它实际上不是列表而是查询集。称之为'my_objects'。)

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