2010-04-13 74 views
0

我有一個django查詢集中的對象列表,例如django從查詢集列表創建列表

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

MyObject具有被設置爲特定年份的域,例如, 2005,2007,2009

我想帶my_list並創建一個包含當年所有MyObject值的年份字典。例如

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循環和DB查詢

感謝

回答

1

(不要調用查詢集「my_list」,它實際上不是一個列表,但一個查詢集,稱之爲'my_objects'。)

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

mydict = collections.defaultdict(list) 

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

感謝您的回答。但是,當我運行行mydict = collections.defaultdict(列表)我得到的錯誤第一個參數必須是可調用 – John 2010-04-14 08:18:11

+0

我的錯。我在列表上面命名了一個變量 – John 2010-04-14 08:48:12