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

2024-04-25 17:01:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典列表,如下所示:

[{'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']

我想要的是检查事件类型的所有可能组合是否存在于事件\u周中,如果不存在,则添加一个具有相同事件\u周和缺少事件\u类型的新dict项的列表

因此,以下面的示例为例,目标结果将是(添加计数为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操作系统的新手,这可能很简单,但会有很大的帮助。谢谢


Tags: noevent类型列表datetimedate字典cl
1条回答
网友
1楼 · 发布于 2024-04-25 17:01:01

首先,从这样的字典列表中提取唯一的日期

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

相关问题 更多 >