Проверка элемента в словаре

Рейтинг: 0Ответов: 2Опубликовано: 22.01.2023

Я получаю строки JSON:

{'lastname': 'Asd', 'firstname': 'Qwe', 'middlename': 'Nbe', 'city': 'n', 'phone': '123'}
{'lastname': 'Asd', 'firstname': 'Qwe', 'middlename': 'Nbe', 'city': 'n', 'phone': '99301232132'}

И вывожу данные:

Имя: {value['lastname']} {value['firstname']} {value['middlename']}
Город: {value['city']}
Телефон: {value['phone']}

Но дело в том, что иногда строки могут быть без какого-то элемента, к примеру без телефона:

{'lastname': 'Asd', 'firstname': 'Qwe', 'middlename': 'Nbe', 'city': 'n'}

И у меня возникает ошибка:

KeyError: 'phone'

Можно ли сделать проверку и выводить элемент если он существует?

Ответы

▲ 1Принят

Можно решить эту проблему двумя способами - проверкой на наличие в словаре и через дефолтное значение.

Первый способ. Проверка.

#проверяем наличие ключа в словаре
if 'name' in dictionary:

    text += name

Этот способ мало полезен в вашем случае.

Второй способ. Дефолт-значение.

В python у словарей есть метод get, позволяющий получить дефолтное значение, если в словаре нет такого ключа. Пример:

'Имя: %s %s %s' % (
    dictionary.get('lastname', 'Иванов'),
    dictionary.get('firstname', 'Иван'), # если нет 'firstname' - подставляется 'Иван'
    dictionary.get('middlename', ''), #если нет 'middlename' - подставляется пустая строка
)
▲ 1
   dic={'lastname': 'Asd', 'firstname': 'Qwe', 'middlename': 'Nbe', 'city': 'n'}
    
   for k in ['lastname','firstname','middlename','city','phone']:
        print(dic.get(k))

Вывод:

Asd
Qwe
Nbe
n
None

(словарь).get('ключ') возвращает None, если ключ отсутствует.