Python 如何使用列表中的键和默认为零的值创建字典?

Python 如何使用列表中的键和默认为零的值创建字典?,python,dictionary,Python,Dictionary,我有a=[1,2,3,4]我想要d={1:0,2:0,3:0,4:0} d = dict(zip(q,[0 for x in range(0,len(q))])) 它可以工作,但很难看。什么是更干净的方式 d = dict([(x,0) for x in a]) **edit Tim的解决方案更好,因为它使用生成器查看对其答案的注释。dict((el,0)表示a中的el)将很好地工作 Python2.7及更高版本还支持dict理解。该语法是{el:0表示a}中的el 除了Tim的答案(非常适

我有
a=[1,2,3,4]
我想要
d={1:0,2:0,3:0,4:0}

d = dict(zip(q,[0 for x in range(0,len(q))]))
它可以工作,但很难看。什么是更干净的方式

d = dict([(x,0) for x in a])
**edit Tim的解决方案更好,因为它使用生成器查看对其答案的注释。

dict((el,0)表示a中的el)
将很好地工作


Python2.7及更高版本还支持dict理解。该语法是
{el:0表示a}
中的el

除了Tim的答案(非常适合您的具体示例)之外,值得一提的是,Tim的答案让您可以执行以下操作:

>>> d = defaultdict(int)
>>> d[0] += 1
>>> d
{0: 1}
>>> d[4] += 1
>>> d
{0: 1, 4: 1}
对于映射
[1,2,3,4]
,就像在您的示例中一样,这是一条离开水的鱼。但取决于你问这个问题的原因,这可能是一种更合适的技巧

d = dict.fromkeys(a, 0)

a
是列表,
0
是默认值。注意不要将默认值设置为某个可变对象(即list或dict),因为它将是一个对象,用作字典中每个键的值(检查此情况的解决方案)。数字/字符串是安全的。

在python版本>=2.7和python 3中:

d = {el:0 for el in a}

生成器表达式避免了填充整个列表的内存开销。您可能应该将该注释提升到实际答案中。另外,在Python2.7和Python3中,您可以执行
{el:0 for el in a}
。(也可以将其添加到您的答案中。)唯一的python方法。这看起来更干净(至少对我来说),与Tim的相比如何?Tim的解决方案适用于任何默认值(您可以使用空列表或datetime对象或任何东西初始化字典)。在我的解决方案中,只能使用不可变对象(int/float、string等)初始化它。在python 3.4中,如果
0
是可变的(例如list或dict),您会遇到麻烦,因为它都指向相同的内存位置。因此,公认的答案更安全。