Получение значения определенного ключа из словаря внутри вложенного списка в Python

#python #dictionary #nested #nested-lists

Вопрос:

Поэтому я пытаюсь проанализировать поля SSL.cert.эмитент и SSL.cert.тема из словаря внутри списка, который находится внутри словаря. Я попытался использовать .item () и .get(). Метод get работает для ключа снаружи, но если я попытаюсь получить() значение чего-либо во вложенном поле данных, это не удастся.

Образец диктанта:

 {u'area_code': None,
 u'asn': u'',
 u'city': u'',
 u'country_code': u'RU',
 u'country_code3': None,
 u'country_name': u'Russian Federation',
 u'data': [{u'_id': u'XX',
            u'_shodan': {},
            u'asn': u'XX',
            u'cpe': [],
            u'cpe23': [],
            u'data': u'',
            u'domains': [u'XX'],
            u'hash': ,
            u'hostnames': [u'XX'],
            u'http': {},
            u'ip': XX,
            u'ip_str': u'XX',
            u'isp': u'XX',
            u'location': {},
            u'opts': {},
            u'ssl': {u'acceptable_cas': [],
                     u'alpn': [u'h2', u'http/1.1'],
                     u'cert': {u'expired': False,
                               u'expires': u'XX',
                               u'extensions': [{},{}],
                               u'fingerprint': {},
                               u'issued': u'XX',
                               u'issuer': {u'C': u'US',
                                           u'CN': u'R3',
                                           u'O': u"Let's Encrypt"},
                               u'subject': {u'CN': u'XX'},
                               u'version': 2},
 

Может ли кто-нибудь, пожалуйста, помочь мне с питоническим способом получения полей data.SSL.cert.issuer amp; data.SSL.cert.subject из приведенного выше диктанта.

Комментарии:

1. Конечно, это не сработает, .get это метод дикта, а не метод списка. Если у вас есть список, вам нужно либо получить доступ к диктанту напрямую с помощью индекса, либо повторить все диктанты в списке с for помощью цикла

2. Почему бы не показать, как вы пытаетесь использовать .get() , вместо того, чтобы просто сказать, что это не работает? При правильном использовании вы должны быть в состоянии использовать его, чтобы получить то, что вам нужно.

Ответ №1:

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

 >>> a={u'area_code': None, ...etc...,
>>> print(a['data'][0]['ssl']['cert']['issuer'])
{'C': 'US', 'CN': 'R3', 'O': "Let's Encrypt"}
 

Если в списке более одного элемента a , вам понадобится что-то вроде:

 >>> for x in a['data']: 
        print(x['ssl']['cert']['issuer'])
 

что позволит включить в данные всех эмитентов сертификатов.

В качестве примечания, похоже, вы используете Python 2 (потому что Python 3 распознает, но игнорирует префикс строки u ). Если это так, пожалуйста, имейте в виду, что, будучи новичком, вы не должны тратить время на изучение Python 2. Те, кто все еще работает с ним, делают это, потому что мы должны поддерживать или переносить устаревший код.