Diccionario nested de comprensión de python

Tengo problemas para comprender las comprensiones de diccionarios nesteds en Python 3. El resultado que obtengo del ejemplo a continuación genera la estructura correcta sin errores, pero solo incluye uno de los pares clave: valor interno. No he encontrado un ejemplo de comprensión de un diccionario nested como este; En Google “python de comprensión de diccionario nested” se muestran ejemplos heredados, comprensiones no anidadas o respuestas resueltas utilizando un enfoque diferente. Puede que esté usando la syntax incorrecta.

Ejemplo:

data = {outer_k: {inner_k: myfunc(inner_v)} for outer_k, outer_v in outer_dict.items() for inner_k, inner_v in outer_v.items()} 

Este ejemplo debería devolver el diccionario original, pero con el valor interno modificado por myfunc .

Estructura del diccionario outer_dict, así como el resultado:

 {outer_k: {inner_k: inner_v, ...}, ...} 

{inner_k: myfunc(inner_v)} no es una comprensión de diccionario. Es solo un diccionario.

Probablemente estés buscando algo como esto en su lugar:

 data = {outer_k: {inner_k: myfunc(inner_v) for inner_k, inner_v in outer_v.items()} for outer_k, outer_v in outer_dict.items()} 

En aras de la legibilidad, no anide las comprensiones del diccionario y las enumere demasiado.

Añadiendo algunos saltos de línea y sangría:

 data = { outer_k: {inner_k: myfunc(inner_v)} for outer_k, outer_v in outer_dict.items() for inner_k, inner_v in outer_v.items() } 

… hace que sea obvio que realmente tiene una comprensión de dict única, “bidimensional”. Lo que realmente quieres es probablemente:

 data = { outer_k: { inner_k: myfunc(inner_v) for inner_k, inner_v in outer_v.items() } for outer_k, outer_v in outer_dict.items() } 

(que es exactamente lo que Blender sugirió en su respuesta, con espacios en blanco adicionales).

 {ok: {ik: myfunc(iv) for ik, iv in ov.items()} for ok, ov in od.items()} 

dónde
ok-clave externa
llave interna
valor ov-exterior
iv-valor interno od-exterior diccionario Así es como lo recuerdo.