2015-06-12 29 views
-1

我有一些已知的值/變量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' 

缺少什麼我在這裏?

+0

你的意思是詞典嗎? – Maroun

回答

4

在你做:

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 
+0

爲什麼不使用defaultdict? – Eli

+0

Ya defaultdict是更好的選擇。 –

0

你必須創建dict

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

然後,你可以指定Address

您正在試圖assing bAddressStreetNumber關鍵。

Address是不存在的,所以它給KeyError

1

使用defaultdict

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

杉杉所有的詞典不是因爲列表中,如果是你會得到一個IndexError .dictionary列表只需創建一個帶有如下賦值的密鑰:

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

而對於創建嵌套字典,precedin g鍵應該被定義爲一個字典到目前爲止!

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

沿邊這表明defaultdict和其他答案setdefault你還可以創建一個嵌套的字典,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}