Python创建列表的字典

问题:

我想创建一个值为列表的字典。例如:

{
  1: ['1'],
  2: ['1','2'],
  3: ['2']
}

如果我做:

d = dict()
a = ['1', '2']
for i in a:
    for j in range(int(i), int(i) + 2): 
        d[j].append(i)

我得到一个KeyError,因为d […]不是列表。在这种情况下,我可以在分配a之后添加以下代码来初始化字典。

for x in range(1, 4):
    d[x] = list()

有没有更好的方法来做到这一点?让我说我不知道​​我需要的密钥,直到我进入第二个for循环。例如:

class relation:
    scope_list = list()
...
d = dict()
for relation in relation_list:
    for scope_item in relation.scope_list:
        d[scope_item].append(relation)

然后一个替代方案将被替代

d[scope_item].append(relation)

if d.has_key(scope_item):
    d[scope_item].append(relation)
else:
    d[scope_item] = [relation,]

什么是最好的办法呢?理想情况下,追加会“正常工作”。有没有办法表达我想要一个空列表的字典,即使我不知道每个键,当我第一次创建列表?

回答:

您可以使用defaultdict

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for i in a:
...   for j in range(int(i), int(i) + 2):
...     d[j].append(i)
...
>>> d
defaultdict(<type 'list'>, {1: ['1'], 2: ['1', '2'], 3: ['2']})
>>> d.items()
[(1, ['1']), (2, ['1', '2']), (3, ['2'])]

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Python creating a dictionary of lists

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 5 = 6