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

PythonDictionary

Python Problem Overview


I have a = [1,2,3,4] and I want d = {1:0, 2:0, 3:0, 4:0}

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

works but is ugly. What's a cleaner way?

Python Solutions


Solution 1 - Python

dict((el,0) for el in a) will work well.

Python 2.7 and above also support dict comprehensions. That syntax is {el:0 for el in a}.

Solution 2 - Python

d = dict.fromkeys(a, 0)

a is the list, 0 is the default value. Pay attention not to set the default value to some mutable object (i.e. list or dict), because it will be one object used as value for every key in the dictionary (check here for a solution for this case). Numbers/strings are safe.

Solution 3 - Python

In python version >= 2.7 and in python 3:

d = {el:0 for el in a}

Solution 4 - Python

In addition to Tim's answer, which is very appropriate to your specific example, it's worth mentioning collections.defaultdict, which lets you do stuff like this:

>>> d = defaultdict(int)
>>> d[0] += 1
>>> d
{0: 1}
>>> d[4] += 1
>>> d
{0: 1, 4: 1}

For mapping [1, 2, 3, 4] as in your example, it's a fish out of water. But depending on the reason you asked the question, this may end up being a more appropriate technique.

Solution 5 - Python

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

**edit Tim's solution is better because it uses generators see the comment to his answer.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionblahsterView Question on Stackoverflow
Solution 1 - PythonTim McNamaraView Answer on Stackoverflow
Solution 2 - PythoneumiroView Answer on Stackoverflow
Solution 3 - PythonAndreyView Answer on Stackoverflow
Solution 4 - PythonintuitedView Answer on Stackoverflow
Solution 5 - PythonGWWView Answer on Stackoverflow