Python 从已知变量在列表中创建字典

Python 从已知变量在列表中创建字典,python,list,dictionary,nested-lists,Python,List,Dictionary,Nested Lists,我有一些已知的值/变量a、b、c、d 我想使用这些变量在列表中创建一个字典。我做了以下操作,但不起作用: nestedlist['Name'] = a nestedlist['Address']['StreetNumber'] = b nestedlist['Address']['Zipcode']=c nestedlist['Email']=d 我得到以下错误: Traceback (most recent call last): nestedlist['Address']['Str

我有一些已知的值/变量a、b、c、d

我想使用这些变量在列表中创建一个字典。我做了以下操作,但不起作用:

nestedlist['Name'] = a
nestedlist['Address']['StreetNumber'] = b
nestedlist['Address']['Zipcode']=c
nestedlist['Email']=d
我得到以下错误:

Traceback (most recent call last):
    nestedlist['Address']['StreetNumber'] = b
    KeyError: 'Address'
我在这里遗漏了什么?

在您这样做之前:

nestedlist['Address']['StreetNumber'] = b
nestedlist['Address']['Zipcode']=c
执行此操作以创建具有密钥地址的字典

之后,您可以添加键、值:

nestedlist['Address']['StreetNumber'] = b
nestedlist['Address']['Zipcode']=c
你必须创建dict

然后你可以分配地址

您正在尝试将b分配到地址的街道号码键

但地址不存在,因此它提供了KeyError使用:


所有字典中的第一个不是列表,因为如果它是一个列表,您将得到一个索引器。字典只需创建一个带有赋值的键,如下所示:

>>> d={}
>>> d['a']=2
>>> d
{'a': 2}
对于createnesteddictionary,到目前为止,前面键的值应该定义为dictionary

>>> d['b']={}
>>> d['b']['c']=6
>>> d
{'a': 2, 'b': {'c': 6}}
除了建议使用defaultdict和setdefault的其他答案外,您还可以使用以下内容创建嵌套字典:


你是说字典吗?为什么不直接使用defaultdict呢?是的,defaultdict是更好的选择。
from collections import defaultdict
blah = defaultdict(dict)
blah['Address']['Zipcode']=c
>>> d={}
>>> d['a']=2
>>> d
{'a': 2}
>>> d['b']={}
>>> d['b']['c']=6
>>> d
{'a': 2, 'b': {'c': 6}}
>>> d={i:j if i!='b' else {'c':j} for i,j in [('b',4),('a',1),('d',3)]}
>>> d
{'a': 1, 'b': {'c': 4}, 'd': 3}