我有一个像这样的词典列表:
[{'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_types = ['No', 'CL', 'PV', 'TT']
我要检查的是event_week是否存在event_type的所有可能组合,如果不存在,则在列表中附加具有相同event_week且缺少event_type的新字典项
因此,以下面的示例为例,目标结果将是(添加了计数为0的项目):
[{'event_date__count': 5,
'event_type': 'NO',
'event_week': datetime.date(2018, 11, 5)},
{'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': 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': 'TT',
'event_week': datetime.date(2018, 11, 12)}]
我是python操作系统的新手,这可能很容易,但是会很有帮助。谢谢
答案 0 :(得分:0)
首先,从这样的词典列表中提取唯一日期,
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)}]