如何创建一个字典,其中包含来自列表的键和默认为(比如)零的值?

我有 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))]))

工作,但丑陋。什么是更干净的方式?

248379 次浏览
d = dict([(x,0) for x in a])

编辑提姆的解决方案是更好的,因为它使用生成器看到他的答案的评论。

dict((el,0) for el in a)运行良好。

Python 2.7及以上版本也支持 dict 理解,其语法为 {el:0 for el in a}

Tim 的回答非常适合您的具体示例,除此之外,值得一提的是 collections.defaultdict,它允许您执行以下操作:

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