根据已知变量在列表中创建字典

Creating a dictionary in a list from known variables

我有一些已知的 values/variables 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

执行此操作以使用键 Address

创建字典
nestedlist.setdefault("Address", dict())

# http://code.activestate.com/recipes/66516-add-an-entry-to-a-dictionary-unless-the-entry-is-a/

之后你可以添加键,值:

nestedlist['Address']['StreetNumber'] = b
nestedlist['Address']['Zipcode']=c

您必须创建 dict,

nestedlist = {"name":None, "Address": {}, "Email": None}

然后你可以赋值Address

您正在尝试将 b 分配给 AddressStreetNumber 键。

但是 Address 不存在,所以它给出 KeyError

使用 defaultdict:

from collections import defaultdict
blah = defaultdict(dict)
blah['Address']['Zipcode']=c

首先它的字典没有列出,因为如果它是一个列表,你会得到一个 IndexError.dictionary 只需创建一个键,赋值如下:

>>> d={}
>>> d['a']=2
>>> d
{'a': 2}

并且对于创建嵌套字典,前面键的值应该被定义为一个字典!

>>> d['b']={}
>>> d['b']['c']=6
>>> d
{'a': 2, 'b': {'c': 6}}

除了建议 defaultdictsetdefault 的其他答案之外,您还可以使用 dict comprehension :

创建一个嵌套字典
>>> 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}