在Python中创建空列表字典的最有效方法?

时间:2012-06-01 14:40:32

标签: python

我正在初始化空列表的字典。有没有比以下更有效的初始化字典的方法?

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

有没有办法我每次都不必写dictLists,或者这是不可避免的?

5 个答案:

答案 0 :(得分:8)

您可以使用collections.defaultdict它允许您设置一个工厂方法,该方法返回缺失键上的特定值。

a = collections.defaultdict(list)

编辑:

这是我的钥匙

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

现在我在这里使用“预定义键”

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

答案 1 :(得分:6)

如果事先知道密钥,则可以

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

或者,在Python> = 2.7:

dictLists = {key: [] for key in ["xcg", "bsd", ...]}

答案 2 :(得分:3)

如果添加静态键,为什么不直接将它们放在dict构造函数中?

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

或者,如果你的密钥并不总是有效的python标识符:

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

另一方面,如果您的按键不是静态的或者很容易按顺序存储,那么如果有很多按键,则循环按键可能会更有效。以下示例仍然输出keys变量,使其不比上述方法更有效,但如果keys以某种方式生成,则可能更有效:

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

答案 3 :(得分:2)

您还可以使用for循环来添加键:

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

答案 4 :(得分:1)

在支持字典理解的Python版本中(Python 2.7 +):

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