Проверьте, все ли словари содержат указанный ключ c с указанным значением c - PullRequest
0 голосов
/ 06 февраля 2020

Мне нужно погрузиться в ['labels_detected_summary'] из 0, 1, 2, чтобы выяснить, все ли их клавиши ['is_mode_unanimous'] верны.

Я знаю, что функция all() поможет с проверкой значений в конце, но я должен подключиться к этим отдельным словарям с key, val подходом или каким-то .get или iteritems()?

    "payload": {
            "0": {
                "labels_detected_summary": {"comm_mode": str, "is_mode_unanimous": bool, "is_mode_match_pred": bool},
                "labels_detected": {
                    ...
                }
            },
            "1": {
                "labels_detected_summary": {"comm_mode": str, "is_mode_unanimous": bool, "is_mode_match_pred": bool},
                "labels_detected": {
                    ...
                }
            },
            "2": {
                "labels_detected_summary": {"comm_mode": str, "is_mode_unanimous": bool, "is_mode_match_pred": bool},
                "labels_detected": {
                    ...
                }
            }
        }
    }

РЕДАКТИРОВАТЬ : Смотрите, это моя проблема с ТАК прямо сейчас. Я знал, что не «публикую свой код», но я также знал, что людям будет весело взламывать различные аспекты этого, и что я чему-то научусь. Нулевой шанс, я бы подумал об использовании итератора для доступа к ключам. Это хороший пост, заслуживающий отрицательного ответа.

1 Ответ

1 голос
/ 06 февраля 2020

Зависит от того, что если вы уверены, что все ключи будут присутствовать, вы можете сделать:

all(
    x['labels_detected_summary']['is_mode_unanimous'] for x in data['payload'].values()
)

Если данные могут быть неполными, вы можете использовать .get(key, default), так что это не вызовет KeyError когда не находит:

all(
    x.get('labels_detected_summary', {}).get('is_mode_unanimous', False) for x in data.get('payload', {}).values()
)
...