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.