从两个列表生成字典的最快方法

时间:2018-08-26 01:48:26

标签: python list dictionary

我有两个列表。例如:

keys = [1, 2, 3, 2, 4, 2, 1]

values = [1, 2, 3, 4, 5, 6, 7]

我想从其中创建列表的字典,如下所示:

dict = {1: [1, 7], 2: [2, 4, 6], 3: [3], 4: [5]} 

最快的方法是什么?通过使用任何模块,也可以不导入任何其他模块,这会带来效率的提高吗?

3 个答案:

答案 0 :(得分:2)

使用collections.defaultdict

from collections import defaultdict
d_dict = defaultdict(list)
for k,v in zip(keys, values):
    d_dict[k].append(v)

dict(d_dict)
#{1: [1, 7], 2: [2, 4, 6], 3: [3], 4: [5]}

答案 1 :(得分:1)

您可以使用以下内容:

d = {}
for k, v in zip(keys, values):
    d.setdefault(k, []).append(v)
print(d)

输出:

{1: [1, 7], 2: [2, 4, 6], 3: [3], 4: [5]}

答案 2 :(得分:0)

您可以使用defaultdict处理您的案件。如果某些键不存在,则默认dict调用工厂方法(当前情况为list()),而不是引发KeyError,它将返回新的空列表,并附加值:

from collections import defaultdict

ld = defaultdict(list)

for k,v in zip(keys, values):
    ld[k].append(v)

print(ld)