如何使用列表中的键和Python中的空值初始化dict?

时间:2010-02-11 02:43:19

标签: dictionary python

我想从中得到:

keys = [1,2,3]

到此:

{1: None, 2: None, 3: None}

有没有pythonic方式吗?

这是一种丑陋的方式:

>>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}

6 个答案:

答案 0 :(得分:320)

dict.fromkeys([1, 2, 3, 4])

这实际上是一个classmethod,所以它也适用于dict-subclasses(如collections.defaultdict)。可选的第二个参数指定用于键的值(默认为None。)

答案 1 :(得分:214)

没有人愿意提供一个字典理解解决方案?

>>> keys = [1,2,3,5,6,7]
>>> {key: None for key in keys}
{1: None, 2: None, 3: None, 5: None, 6: None, 7: None}

答案 2 :(得分:53)

dict.fromkeys(keys, None)

答案 3 :(得分:7)

d = {}
for i in keys:
    d[i] = None

答案 4 :(得分:1)

许多工作流程中,您想要为任意键附加默认值/初始值,您不需要 提前单独散列每个键。您可以使用collections.defaultdict。例如:

from collections import defaultdict

d = defaultdict(lambda: None)

print(d[1])  # None
print(d[2])  # None
print(d[3])  # None

这效率更高,它省去了在实例化时散列所有键的麻烦。此外,defaultdictdict的子类,因此通常无需转换回常规字典。

对于需要要求控制许可键的工作流程,您可以根据接受的答案使用dict.fromkeys

d = dict.fromkeys([1, 2, 3, 4])

答案 5 :(得分:-1)

default_keys = [1, "name"]

要获取以None为值的字典:

dict.fromkeys(default_keys)  

输出:

{1: None, 'name': None}

要获取具有默认值的字典:

dict.fromkeys(default_keys, [])  

输出:

{1: [], 'name': []}