如何检查同一字典中是否存在两个键值对

时间:2018-12-30 18:29:47

标签: python list dictionary

我有一个像这样的词典列表:

[{'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操作系统的新手,这可能很容易,但是会很有帮助。谢谢

1 个答案:

答案 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_typedate的组合,是否不存在,请将其附加到词典列表中,否则将其忽略。这样做吧,

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)}]