我想从这里得到:
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]
:
{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: []}