Вы можете использовать defaultdict
вместо ручного вызова setdefault
.
Вспомогательное сопоставление (EVENT_MAPPING
) может использоваться для сокращения кода для назначения event_data_by_organizer
.
Из-за условий, при которых вы группируете события, дальнейшее сокращение трудно group_events(events)
(или, по крайней мере, я не вижу пути).
from collections import defaultdict
EVENT_MAPPING = {
"archived": "events_archived",
"draft": "events_draft",
"past": "events_past",
"live": "events_live",
}
def group_events(events):
grouped_events = defaultdict(list)
for event in events:
if event.status == EventStatus.ARCHIVED:
events = grouped_events["archived"]
elif event.status == EventStatus.DRAFT:
events = grouped_events["draft"]
elif event.is_over:
events = grouped_events["past"]
else:
events = grouped_events["live"]
events.append(event)
return grouped_events
def set_organizer_events(events_by_organizer, organizer_pk, grouped_events):
for event, state in EVENT_MAPPING.items():
events_by_organizer[organizer_pk][state] = grouped_events[event]
my_grouped_events = group_events(my_events)
set_organizer_events(my_organizers, 1, my_grouped_events)