关于python:如何使用列表中的键创建一个字典,并将值默认为(比方说)为零?

How do I create a dictionary with keys from a list and values defaulting to (say) zero?

本问题已经有最佳答案,请猛点这里访问。

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

1
d = dict(zip(q,[0 for x in range(0,len(q))]))

有效,但很难看。什么是更干净的方法?


dict((el,0) for el in a)会很好地工作。

python 2.7及更高版本还支持dict理解。该语法是{el:0 for el in a}


1
d = dict.fromkeys(a, 0)

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


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

1
d = {el:0 for el in a}


除了Tim的答案,这非常适合您的具体示例,还值得一提的是collections.defaultdict,它允许您执行如下操作:

1
2
3
4
5
6
7
>>> d = defaultdict(int)
>>> d[0] += 1
>>> d
{0: 1}
>>> d[4] += 1
>>> d
{0: 1, 4: 1}

为了像在您的示例中那样映射[1, 2, 3, 4],它是一条出水的鱼。但根据你问这个问题的原因,这可能是一种更合适的技巧。


1
d = dict([(x,0) for x in a])

**编辑Tim的解决方案更好,因为它使用生成器,请参阅他回答的注释。