2012-06-01 87 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

相关问题