Задать вопрос
@RusticAnd

Как в словаре прописать условие if esle?

Добрый день. Вопрос такой. Получаю данные, большой массив, и фильтрую его в ручную, записывая все в словарь, но иногда попадаются пустые ключи, и 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: ссылка почему то не вставилась(

Данный массив который получаю
647ef0772ff49953745504.png
  • Вопрос задан
  • 336 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы