Как создать вложенный словарь со списком значений? - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть два следующих набора запросов:

opus = Work_Music.objects.filter(composerwork__person=self.kwargs['pk'], level=0).order_by('date_completed')
event = LifeEvent.objects.filter(person=self.kwargs['pk']).order_by('date_end')

Первый извлекает работу композитора, а второй - события его жизни.

Я хочу создать вложенный словарь:Первый уровень указывается по году. Второй уровень имеет две клавиши «работа» и «жизнь». Это должен быть список значений, потому что в данном году может быть несколько работ и событий.

Я написал следующее:

    # timeline = defaultdict(list)
    timeline = dict()
    for o in opus:
        if o.date_comp_f not in timeline:
            timeline[o.date_comp_f] = {}
            timeline[o.date_comp_f]['work'] = {}
            timeline[o.date_comp_f]['work'].append(o)
        else:
            timeline[o.date_comp_f]['work'].append(o)
    for e in event:
        if e.date_end_y not in timeline:
            timeline[e.date_end_y] = {}
            timeline[e.date_end_y]['life'] = {}
            timeline[e.date_end_y]['life'].append(e)
        else:
            timeline[e.date_end_y]['life'].append(e)
    timeline = dict(timeline)

Я также хочу отсортировать ключ первого уровня вхронологический порядок. Как мне это сделать? Я продолжаю получать сообщения об ошибках.

1 Ответ

0 голосов
/ 30 сентября 2019

Вы использовали {}, когда хотели использовать список? Я предполагаю, что это была опечатка, но вот исправление (с несколькими упрощениями):

# timeline = defaultdict(list)
timeline = dict()
for o in opus:
    if o.date_comp_f not in timeline:
        timeline[o.date_comp_f] = {}
        timeline[o.date_comp_f]['work'] = []
    timeline[o.date_comp_f]['work'].append(o)
for e in event:
    if e.date_end_y not in timeline:
        timeline[e.date_end_y] = {}
        timeline[e.date_end_y]['life'] = []
    timeline[e.date_end_y]['life'].append(e)

timeline = dict(timeline)

Если это не работает, (что я предполагаю, что это не так), можете ли вы предоставитьмодели Work_Music и LifeEvents?

...