Проблема с вложенным Dict в Python (KeyError) - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь добавить данные в сложный словарь в Python.
Структура дана, я не могу изменить это.

Пример кода:

class AutoVivification(dict):
    def __getitem__(self, item):
        try:
            return dict.__getitem__(self, item)
        except KeyError:
            value = self[item] = type(self)()
            return value

class Command(BaseCommand):

    def vorgang(self, lead):

        payload = AutoVivification()

        payload['antragsteller1'] = {
            'personendaten': {
                'anrede': lead.salutation,
                'vorname': lead.firstname,
                'nachname': lead.lastname,
                'email': lead.email,
                'telefonPrivat': lead.phone,
                'geburtsdatum': str(lead.birthdate)
            },
            'wohnsituation': {
                'anschrift': {
                    'strasse': lead.address,
                    'plz': lead.zip,
                    'ort': lead.city
                }
            },
            'beschaeftigung': {
                'beschaeftigungsart': lead.employment
            }
        }


        if lead.employment == 'ARBEITER':
            payload['antragsteller1']['beschaeftigung']['arbeiter']['beschaeftigungsverhaeltnis']['nettoeinkommenMonatlich'] = str(lead.income)

        elif lead.employment == 'ANGESTELLTER':
            payload['antragsteller1']['beschaeftigung']['angestellter']['beschaeftigungsverhaeltnis']['nettoeinkommenMonatlich'] = str(lead.income)

        elif lead.employment == 'ARBEITSLOSER':
            payload['antragsteller1']['beschaeftigung']['arbeitsloser']['sonstigesEinkommenMonatlich'] = str(lead.income)

Ошибка:

KeyError: 'angestellter'

Почему невозможно добавить 'angestellter' во второй оператор elif?
И как это возможно?

1 Ответ

0 голосов
/ 16 апреля 2020
payload['antragsteller1']['beschaeftigung']['angestellter']['beschaeftigungsverhaeltnis']['nettoeinkommenMonatlich'] = str(lead.income)

На самом деле это утверждение:

some_dict = payload['antragsteller1']['beschaeftigung']['angestellter']['beschaeftigungsverhaeltnis']
some_dict['nettoeinkommenMonatlich'] = str(lead.income)

Поэтому, прежде чем установить последнее значение, вы извлекаете существующие пары ключ-значение, которых не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...