Cuál es la mejor manera de implementar diccionarios anidados?

Tengo una estructura de datos que esencialmente equivale a un diccionario anidado. Digamos que se ve así:

{'new jersey': {'mercer county': {'plumbers': 3,
                                  'programmers': 81},
                'middlesex county': {'programmers': 81,
                                     'salesmen': 62}},
 'new york': {'queens county': {'plumbers': 9,
                                'salesmen': 36}}}

Ahora, mantener y crear esto es bastante doloroso; cada vez que tengo un nuevo estado / condado / profesión tengo que crear los diccionarios de capa inferior a través de molestos bloques try / catch. Además, tengo que crear iteradores anidados molestos si quiero repasar todos los valores.

También podría usar tuplas como claves, como:

{('new jersey', 'mercer county', 'plumbers'): 3,
 ('new jersey', 'mercer county', 'programmers'): 81,
 ('new jersey', 'middlesex county', 'programmers'): 81,
 ('new jersey', 'middlesex county', 'salesmen'): 62,
 ('new york', 'queens county', 'plumbers'): 9,
 ('new york', 'queens county', 'salesmen'): 36}

Esto hace que la iteración sobre los valores sea muy simple y natural, pero es más sintácticamente doloroso hacer cosas como agregaciones y mirar subconjuntos del diccionario (por ejemplo, si solo quiero ir estado por estado).

Básicamente, a veces quiero pensar en un diccionario anidado como un diccionario plano, y a veces quiero pensar en él como una jerarquía compleja. Podría envolver todo esto en una clase, pero parece que alguien podría haberlo hecho ya. Alternativamente, parece que podría haber algunas construcciones sintácticas realmente elegantes para hacer esto.

¿Cómo podría hacer esto mejor?

Anexo: Soy consciente desetdefault() pero en realidad no es una sintaxis limpia. Además, cada sub-diccionario que cree todavía necesita tenersetdefault() configurado manualmente.

Respuestas a la pregunta(20)

Su respuesta a la pregunta