как проверить, существуют ли две пары значений ключа в одном словаре - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть список словарей, который выглядит следующим образом:

[{'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_type для event_week, и если нет, то добавить список с новым элементом dict с таким же 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 OS, это может быть легко, но будет большой помощью.Спасибо

1 Ответ

0 голосов
/ 30 декабря 2018

Сначала извлеките уникальные даты из списка словарей, подобных этому,

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)}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...