我想从这里得到:
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}
当前回答
dict.fromkeys(keys, 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: []}
简单地迭代并将值添加到空字典:
d = {}
for i in keys:
d[i] = None
只是因为dict构造函数与zip很好地工作很有趣,你可以重复默认值并将其压缩到键:
from itertools import repeat
keys = [1, 2, 3]
default_value = None
d = dict(zip(keys, repeat(default_value)))
print(d)
将:
{1: None, 2: None, 3: None}
Repeat为传递给它的元素创建了一个无限迭代器,但由于zip停止在最短的可迭代对象上,所有工作正常。
dict.fromkeys(keys, None)
列表推导式可用于构建键-值对列表,然后将其传递给dict构造函数。因此:
>>> keys = {"a", "b", "c", "d"}
>>> d = dict([(key, []) for key in keys])
>>> d
{'d': [], 'c': [], 'a': [], 'b': []}
值表达式每次都被求值,在上面的例子中创建单独的列表:
>>> d['a'].append('test')
>>> d
{'d': [], 'c': [], 'a': ['test'], 'b': []}