Добрый день. Вопрос такой. Получаю данные, большой массив, и фильтрую его в ручную, записывая все в словарь, но иногда попадаются пустые ключи, и Python на это ругается.
код получения данных и создание словаряmatches = json.load(all_matches)
result_dict = {}
for match in matches['events']:
if match["tournament"]["category"]["name"] == 'ATP' or match["tournament"]["category"]["name"] == 'WTA':
result_dict.setdefault(match['id'], {
'match_id': match['id'],
'tour_id': match['tournament']['id'],
'cat_tour_id': match['tournament']['category']['id'],
'round_info': match['roundInfo']['round'],
'round_info_name': match['roundInfo']['name'],
'custom_id': match['customId'],
'status_code': match['status']['code'],
'status_type': match['status']['type'],
'winner_code': match['winnerCode'],
'home_team_id': match['homeTeam']['id'],
'away_team_id': match['awayTeam']['id'],
'start_timestamp': match['startTimestamp'],
'match_slug': match['slug'],
'home_score_display': 0 if len(match['homeScore']) == 0 else match['homeScore']['display'],
# 'ground_type': match['groundType']
})
print(result_dict)
match['homeScore']
Этот ключ всегда существует, но бывает пустым, если он пустой, мне нужно вставить просто 0 либо Null.
'home_score_display': 0 if len(match['homeScore']) == 0 else match['homeScore']['display'],
данная проверка выкидывает ошибку:
'home_score_display': 0 if len(match['homeScore']) == 0 else match['homeScore']['display'],
KeyError: 'display'
Можно было бы конечно и все данные взять, и даже код есть который автоматом склеивает многомерные ключи между собой и берет value, нейронка подскалаза, но проблема в том, что весь этот массив обернут в список, и при закидывании в код от нейросети, он ругается на то что у list нет items().
Покажу код и полностью массив данных, может подскажете как этот массив сделать словарем и безболезненно убрать обертку events.
код от нейросетиdef flatten_dict(d, parent_key='', sep='_'):
items = []
for k, v in d.items():
new_key = f"{parent_key}{sep}{k}" if parent_key else k
if isinstance(v, MutableMapping):
items.extend(flatten_dict(v, new_key, sep=sep).items())
else:
items.append((new_key, v))
return dict(items)
my_dict = {'foo': {'bar': {'baz': 1}}, 'hello': {'world': 2}, 'spam': {'eggs': 3, 'bacon': 1}}
result_dict = {}
for k, v in my_dict.items():
flattened_dict = flatten_dict(v, parent_key=k, sep='_')
for key, value in flattened_dict.items():
result_dict[key] = value
print(result_dict)
а мой массив получается такой
my_dict = {'events'['foo': {'bar': {'baz': 1}}, 'hello': {'world': 2}, 'spam': {'eggs': 3, 'bacon': 1}]}
Можно подсказать как по первому варианту, потому что суть вопроса в этом, ничего страшного нет, руками добавлю. Можно помочь с автоматическим получением данных, понимаю, что это и правильнее и проще. Потом отфильтровать будет не сложно.
UPD: ссылка почему то не вставилась(
Данный массив который получаю