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

Python 从两个列表生成字典的最快方法,python,list,dictionary,Python,List,Dictionary,我有两张单子。例如: keys = [1, 2, 3, 2, 4, 2, 1] 及 我想创建一个列表字典,如下所示: dict = {1: [1, 7], 2: [2, 4, 6], 3: [3], 4: [5]} 通过使用任何模块和不导入任何附加模块,最快的方法是什么,以及是什么提高了效率?使用集合。defaultdict from collections import defaultdict d_dict = defaultdict(list) for k,v in zip(keys,

我有两张单子。例如:

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

我想创建一个列表字典,如下所示:

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

通过使用任何模块和不导入任何附加模块,最快的方法是什么,以及是什么提高了效率?

使用
集合。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]}

使用
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]}

您可以使用以下选项:

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]}

您可以使用以下选项:

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]}
你可以用它来做你的案子。如果某个键不存在,默认dict将调用工厂方法(
list()
,对于当前的情况),它将返回新的空列表,而不是引发KeyError,该列表将附加值:

from collections import defaultdict

ld = defaultdict(list)

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

print(ld)
你可以用它来做你的案子。如果某个键不存在,默认dict将调用工厂方法(
list()
,对于当前的情况),它将返回新的空列表,而不是引发KeyError,该列表将附加值:

from collections import defaultdict

ld = defaultdict(list)

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

print(ld)