代码之家  ›  专栏  ›  技术社区  ›  Tamas

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

  •  -3
  • Tamas  · 技术社区  · 6 年前

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

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

    我想检查的是,事件周是否存在所有可能的事件类型组合,如果不存在,则添加一个列表,其中包含具有相同事件周和缺少事件类型的新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操作系统的新手,这可能很简单,但会有很大帮助。谢谢

    1 回复  |  直到 6 年前
        1
  •  0
  •   Abdur Rehman    6 年前

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

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