Django создать список из списка наборов запросов - PullRequest
0 голосов
/ 13 апреля 2010

У меня есть список объектов из набора запросов django, например,

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

MyObject имеет поле с именем year, которое установлено на определенный год, например, 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 и запросов к базе данных

Спасибо

Ответы [ 2 ]

4 голосов
/ 13 апреля 2010
import collections

mydict = collections.defaultdict(list)

for obj in my_list:
  mydict[obj.year].append(obj)
1 голос
/ 13 апреля 2010

(Не называйте набор запросов my_list, на самом деле это не список, а набор запросов. Назовите его как my_objects.)

my_dict = {}
for obj in my_objects:
    my_dict.setdefault(obj.year, []).append(obj)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...