0

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

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

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

4

5 回答 5

8

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

a = collections.defaultdict(list)

编辑:

这是我的钥匙

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

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

for key in b:
    a[key].append(33) 
于 2012-06-01T14:42:19.593 回答
7

如果事先知道密钥,您可以这样做

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

或者,在 Python >=2.7 中:

dictLists = {key: [] for key in ["xcg", "bsd", ...]}
于 2012-06-01T14:43:51.570 回答
4

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

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

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

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

另一方面,如果您的密钥不是静态的或易于存储在序列中,那么如果有很多密钥,则循环遍历这些密钥可能会更有效。下面的示例仍然键入keys变量,使其不比上述方法更有效,但如果keys以某种方式生成,这可能更有效:

keys = ['xcg', 'bsd', 'ghf', …]
dictLists = {key: [] for key in keys}
于 2012-06-01T14:42:07.733 回答
2

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

for i in ("xcg", "bsd", "ghf", "cda"):
    dictList[i] = []
于 2012-06-01T14:42:51.213 回答
1

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

dictLists = {listKey: list() for listKey in listKeys}
于 2012-06-01T14:44:11.767 回答