A partir do Python 2.5, ao estender dicionários, você pode dar a suas classes um método __missing_, que será executado toda vez que você tentar acessar um índice inexistente. Veja:
class Counter(dict): def __missing__(self, key): self[key]=0 return self[key]
Veja funcionando:
>>> votos=['john','paul','john','john','ringo', ... 'george','paul','ringo','ringo','john', ... 'paul','john','george','paul','paul', ... 'john','paul','john','ringo','paul'] >>> c=Counter() >>> for v in votos: ... c[v]+=1 ... >>> c {'ringo': 4, 'paul': 7, 'john': 7, 'george': 2}
Enquanto um Counter é um bom exemplo do __missing__, vale lembrar quem tem a sorte de poder usar python 3.1 tem pode usar a classe collections.Counter para esse fim: http://docs.python.org/dev/library/collections.html#collections.Counter
O collections.defaultdict também pode ser usado pra isso.