2012-06-01 58 views
0

我正在初始化空列表的字典。有沒有比以下更有效的初始化字典的方法?在Python中創建空列表字典的最有效方法?

dictLists = {} 
dictLists['xcg'] = [] 
dictLists['bsd'] = [] 
dictLists['ghf'] = [] 
dictLists['cda'] = [] 
... 

有沒有一種方法,我不必每次都寫dictLists,或者這是不可避免的?

+0

字典鍵是你真正想要的嗎?如果它們是隨機的或算術級數,它們是否重要? – Ben

+0

負載猜測您的密鑰的答案存儲在一個變量或類似的,你正在循環。你的鑰匙是靜態的嗎?或者它們是否生成? –

+0

鍵是靜態的。 – idealistikz

回答

8

您可以使用collections.defaultdict它允許您設置一個工廠方法返回丟失鍵上的特定值。

a = collections.defaultdict(list) 

編輯:

這裏是我的鑰匙

b = ['a', 'b','c','d','e'] 

現在,這裏使用 「預定義項」

for key in b: 
    a[key].append(33) 
+0

這將是我的下一個編輯:-P –

+0

太慢; D .... –

+0

這將工作,如果鍵是靜態的? – idealistikz

3

如果你添加靜態鍵,爲什麼不直接把它們放在字典構造函數?

dictLists = dict(xcg=[], bsd=[], ghf=[]) 

,或者,如果您的鍵不也總是有效的Python標識符:

dictLists = {'xcg': [], 'bsd': [], 'ghf': []} 

如果,另一方面,你的鑰匙不是靜態的或容易儲存在一個序列,循環的鑰匙如果它們中有很多,效率會更高。以某種方式產生下面的例子仍然類型從keys變量使這個並不比上述方法更有效,但如果keys這可能是更有效的:

keys = ['xcg', 'bsd', 'ghf', …] 
dictLists = {key: [] for key in keys} 
+0

這是絕對最有效的,就像海報問到的那樣。 – georg

2

我你也可以使用一個for循環的要添加的鍵:

for i in ("xcg", "bsd", "ghf", "cda"): 
    dictList[i] = [] 
6

如果密鑰是事先知道,你可以做

dictLists = dict((key, []) for key in ["xcg", "bsd", ...]) 

或者,在Python> = 2.7:

​​
1

在支持字典推導了Python的版本(Python的2.7+) :

dictLists = {listKey: list() for listKey in listKeys} 
+0

@MartijnPieters謝謝,現在我簡單地回答了我的確認。 '[]'也可以代替'list()',就像在其他人的回答中一樣。 – JAB

相關問題