我想从这里得到:

keys = [1,2,3]

:

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

有蟒式的方法吗?

这是一种丑陋的方式:

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

当前回答

使用字典理解:

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

值表达式每次都会被求值,所以这可以用来创建一个dict,使用单独的列表(例如)作为值:

>>> x = {key: [] for key in [1, 2, 3, 4]}
>>> x[1] = 'test'
>>> x
{1: 'test', 2: [], 3: [], 4: []}

其他回答

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

from collections import defaultdict

d = defaultdict(lambda: None)

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

这是更有效的,它节省了在实例化时对所有键进行哈希。此外,defaultdict是dict的一个子类,所以通常不需要转换回常规字典。

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

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

Dict.fromkeys直接解决了问题:

>>> dict.fromkeys([1, 2, 3, 4])
{1: None, 2: None, 3: None, 4: None}

这实际上是一个类方法,所以它也适用于dict-子类(如collections.defaultdict)。

可选的第二个参数,默认为None,指定用于键的值。注意,相同的对象将用于每个键,这可能会导致可变值的问题:

>>> x = dict.fromkeys([1, 2, 3, 4], [])
>>> x[1].append('test')
>>> x
{1: ['test'], 2: ['test'], 3: ['test'], 4: ['test']}

如果这是不可接受的,请参阅如何初始化值为不同空列表的字典?为了解决问题。

dict.fromkeys(keys, None)

简单地迭代并将值添加到空字典:

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

使用字典理解:

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

值表达式每次都会被求值,所以这可以用来创建一个dict,使用单独的列表(例如)作为值:

>>> x = {key: [] for key in [1, 2, 3, 4]}
>>> x[1] = 'test'
>>> x
{1: 'test', 2: [], 3: [], 4: []}