¿Cómo aplanar diccionarios de Python nesteds?

Estoy tratando de aplanar el diccionario nested:

dict1 = { 'Bob': { 'shepherd': [4, 6, 3], 'collie': [23, 3, 45], 'poodle': [2, 0, 6], }, 'Sarah': { 'shepherd': [1, 2, 3], 'collie': [3, 31, 4], 'poodle': [21, 5, 6], }, 'Ann': { 'shepherd': [4, 6, 3], 'collie': [23, 3, 45], 'poodle': [2, 10, 8], } } 

Me gustaría mostrar todos los valores en las listas: [4, 6, 3, 23, 3, 45, 2, 0, 6, 1, 2, 3, …, 2, 10, 8]

Mi primera idea fue hacer de esta manera:

 dict_flatted = [ i for name in names.values() for dog in dogs.values() for i in dog] 

Aunque estoy recibiendo el error. Me encantaría recibir consejos sobre cómo manejarlo.

Puede utilizar una función recursiva simple de la siguiente manera.

 def flatten(d): res = [] # Result list if isinstance(d, dict): for key, val in d.items(): res.extend(flatten(val)) elif isinstance(d, list): res = d else: raise TypeError("Undefined type for flatten: %s"%type(d)) return res dict1 = { 'Bob': { 'shepherd': [4, 6, 3], 'collie': [23, 3, 45], 'poodle': [2, 0, 6], }, 'Sarah': { 'shepherd': [1, 2, 3], 'collie': [3, 31, 4], 'poodle': [21, 5, 6], }, 'Ann': { 'shepherd': [4, 6, 3], 'collie': [23, 3, 45], 'poodle': [2, 10, 8], } } print( flatten(dict1) ) 

Estás tratando de usar variables que no existen.

Utilizar esta

 dict_flatted = [ i for names in dict1.values() for dog in names.values() for i in dog] 

La función recursiva puede ser de una sola línea:

 def flatten(d): return d if isinstance(d, list) else sum((flatten(i) for i in d.values()), []) 

Nota: fue una respuesta para una pregunta duplicada.