Em muitos fluxos de trabalho em que você deseja anexar um valor inicial / padrão para chaves arbitrárias, não é necessário fazer o hash de cada chave individualmente antes do tempo. Você pode usar collections.defaultdict. Por exemplo:
from collections import defaultdict
d = defaultdict(lambda: None)
print(d[1]) # None
print(d[2]) # None
print(d[3]) # None
Isso é mais eficiente, pois evita o hash de todas as suas chaves na instanciação. Além disso, defaultdicté uma subclasse de dict, portanto, geralmente não há necessidade de converter novamente em um dicionário comum.
Para fluxos de trabalho em que você precisa de controles sobre chaves permitidas, pode usar dict.fromkeysconforme a resposta aceita:
d = dict.fromkeys([1, 2, 3, 4])
dict.fromkeys([1, 2, 3], [])todas as chaves são mapeadas para a mesma lista, e a modificação de uma modificará todas elas.