Сначала извлеките уникальные даты из списка словарей, подобных этому,
event_types = ['NO', 'CL', 'PV', 'TT']
dict_list = [{'event_date__count': 5,
'event_type': 'NO',
'event_week': datetime.date(2018, 11, 5)},
{'event_date__count': 2,
'event_type': 'NO',
'event_week': datetime.date(2018, 11, 12)},
{'event_date__count': 2,
'event_type': 'CL',
'event_week': datetime.date(2018, 11, 12)},
{'event_date__count': 2,
'event_type': 'PV',
'event_week': datetime.date(2018, 11, 12)}]
dates = []
for item in dict_list:
dates.append(item['event_week'])
dates = list(set(dates))
print(dates)
Вывод:
[datetime.date(2018, 11, 5), datetime.date(2018, 11, 12)]
Теперь выполните цикл по event_types
и для каждого события возьмитедата из списка dates
и для каждой даты проверьте комбинацию event_type
и date
и, если она не существует, добавьте ее в список словарей, в противном случае просто проигнорируйте ее.Сделай так,
for type in event_types:
found = False
for date in dates:
for item in dict_list:
if item['event_type'] == type and item['event_week'] == date:
found = True
if (found == False):
dict_list.append({'event_date__count': 0,
'event_type': type,
'event_week': date})
dict_list
Вывод:
[{'event_date__count': 5,
'event_type': 'NO',
'event_week': datetime.date(2018, 11, 5)},
{'event_date__count': 2,
'event_type': 'NO',
'event_week': datetime.date(2018, 11, 12)},
{'event_date__count': 2,
'event_type': 'CL',
'event_week': datetime.date(2018, 11, 12)},
{'event_date__count': 2,
'event_type': 'PV',
'event_week': datetime.date(2018, 11, 12)},
{'event_date__count': 0,
'event_type': 'CL',
'event_week': datetime.date(2018, 11, 5)},
{'event_date__count': 0,
'event_type': 'PV',
'event_week': datetime.date(2018, 11, 5)},
{'event_date__count': 0,
'event_type': 'TT',
'event_week': datetime.date(2018, 11, 5)},
{'event_date__count': 0,
'event_type': 'TT',
'event_week': datetime.date(2018, 11, 12)}]