dict.fromkeys directly solves the problem:
>>> dict.fromkeys([1, 2, 3, 4])
{1: None, 2: None, 3: None, 4: None}
This is actually a classmethod, so it works for dict-subclasses (like collections.defaultdict) as well.
The optional second argument, which defaults to None, specifies the value to use for the keys. Note that the same object will be used for each key, which can cause problems with mutable values:
>>> x = dict.fromkeys([1, 2, 3, 4], [])
>>> x[1].append('test')
>>> x
{1: ['test'], 2: ['test'], 3: ['test'], 4: ['test']}
If this is unacceptable, see How can I initialize a dictionary whose values are distinct empty lists? for a workaround.
Nonevalues for all keys? If so, why not use asetinstead? The only reason that comes to mind for using adictinstead ofsetin this case is if you want to iterate the structure in insertion order.