Dict奇怪的初始化语法中的列表列表

时间:2015-06-09 00:57:00

标签: python dictionary

我正在尝试将列表存储在dicts中,这很有效,但我不喜欢我构建/初始化列表的方式。我想摆脱: dummy [i] = [(1,2,3)] 。有什么建议吗?

dummy = dict()

alphabet = ["aaa", "bbb", "ccc"]

for i in alphabet:
    dummy[i] = [(1,2,3)] # <-- better initialization? 
    dummy[i].append([(1,2,3)])

输出结果为:

{'aaa': [(1, 2, 3), [(1, 2, 3)]], 'bbb': [(1, 2, 3), [(1, 2, 3)]], 'ccc': [(1, 2, 3), [(1, 2, 3)]]}

Sidequestion:是否有任何其他数据类型支持一个键的多个值?

2 个答案:

答案 0 :(得分:1)

collections.defaultdict允许您为不存在的键指定初始值设定项。

import collections

dummy = collections.defaultdict(list)

alphabet = ["aaa", "bbb", "ccc"]

for i in alphabet:
    dummy[i].append([(1,2,3)])
    dummy[i].append([(1,2,3)])

答案 1 :(得分:1)

使用Ignacio建议的内容或使用dict.setdefault

dummy = dict()

alphabet = ["aaa", "bbb", "ccc"]

for i in alphabet:
    dummy.setdefault(i,[]).append((1,2,3)) # <-- better initialization? 

如果你想用列表值初始化一个dict,你也可以用dict comp创建它:

alphabet = ["aaa", "bbb", "ccc"]
dummy = {k:[(1,2,3)] for k in alphabet}

print(dummy)
{'aaa': [(1, 2, 3)], 'bbb': [(1, 2, 3)], 'ccc': [(1, 2, 3)]}

如果你有重复键setdefault和defaultdict是你想要的。