首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中嵌套字典的问题(KeyError)

Python中嵌套字典的问题(KeyError)
EN

Stack Overflow用户
提问于 2020-04-16 04:52:38
回答 1查看 92关注 0票数 0

我尝试用Python将数据追加到一个复杂的字典中。

结构是给定的,我不能改变这一点。

示例代码:

代码语言:javascript
复制
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)

错误:

代码语言:javascript
复制
KeyError: 'angestellter'

为什么不能在第二个elif语句中附加'angestellter‘?

这怎么可能呢?

EN

回答 1

Stack Overflow用户

发布于 2020-04-16 05:01:26

代码语言:javascript
复制
payload['antragsteller1']['beschaeftigung']['angestellter']['beschaeftigungsverhaeltnis']['nettoeinkommenMonatlich'] = str(lead.income)

这句话实际上是:

代码语言:javascript
复制
some_dict = payload['antragsteller1']['beschaeftigung']['angestellter']['beschaeftigungsverhaeltnis']
some_dict['nettoeinkommenMonatlich'] = str(lead.income)

因此,在设置最后一个值之前,您将检索不存在的现有键-值对。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61238418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档