forma pythonica para crear dict 3d

Quiero crear un dict que se puede acceder como:

d[id_1][id_2][id_3] = amount 

A partir de ahora tengo una enorme función fea:

  def parse_dict(id1,id2,id3,principal, data_dict): if data_dict.has_key(id1): values = data_dict[id1] if values.has_key[id2] .. else: inner_inner_dict = {} # and so on 

¿Cuál es la forma pythonica de hacer esto?

tenga en cuenta que ingresé el principal … pero lo que quiero es la cantidad … Entonces, si las tres teclas están ahí … ¡agregue el principal a la cantidad anterior!

Gracias

Es posible que desee considerar el uso de defaultdict :

Por ejemplo:

 json_dict = defaultdict(lambda: defaultdict(dict)) 

creará una sentencia por defecto de las predicciones predeterminadas de los dictados (lo sé … pero es correcto), para acceder a ella, simplemente puede hacer:

 json_dict['context']['name']['id'] = '42' 

sin tener que recurrir a usar if...else para inicializar.

 from collections import defaultdict d = defaultdict(lambda : defaultdict(dict)) d[id_1][id_2][id_3] = amount 

Puede crear un diccionario simple que cree nuevos (utilizando la Autovivificación ):

 >>> class AutoDict(dict): def __missing__(self, key): x = AutoDict() self[key] = x return x >>> d = AutoDict() >>> d[1][2][3] = 4 >>> d {1: {2: {3: 4}}} 

Esto no tendrá un límite de dimensiones como el valor predeterminado con dict.

O una versión más simple usando defaultdict (del enlace wiki anterior):

 def auto_dict(): return defaultdict(auto_dict) 
 >>> from collections import defaultdict >>> import json >>> def tree(): return defaultdict(tree) >>> t = tree() >>> t['a']['b']['c'] = 'foo' >>> t['a']['b']['d'] = 'bar' >>> json.dumps(t) '{"a": {"b": {"c": "foo", "d": "bar"}}}' 

Tal vez necesite echar un vistazo a las matrices multidimensionales, por ejemplo en numpy:

http://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html