A veces, mientras trabajamos con datos de Python, podemos tener un problema en el que necesitamos realizar el aplanamiento de ciertas claves en registros de listas anidadas. Este tipo de problema ocurre durante el preprocesamiento de datos. Analicemos ciertas formas en que se puede realizar esta tarea.
Método n.º 1: Usar bucle
Este es un método de fuerza bruta para realizar esta tarea. En esto, construimos un nuevo diccionario asignando claves base y luego realizamos el aplanamiento de los elementos clave internos usando un bucle anidado.
# Python3 code to demonstrate working of # Flatten Nested Keys # Using loop # initializing list test_list = [{'Gfg' : 1, 'id' : 1, 'data' : [{'rating' : 7, 'price' : 4}, {'rating' : 17, 'price' : 8}]}, {'Gfg' : 1, 'id' : 2, 'data' : [{'rating' : 18, 'price' : 19}]}] # printing original list print("The original list is : " + str(test_list)) # Flatten Nested Keys # Using loop res = [] for sub in test_list: temp1 = { 'Gfg': sub['Gfg'], 'id': sub['id'] } for data in sub.get('data', []): res.append({ **temp1, 'rating': data['rating'], 'price': data['price']}) # printing result print("The flattened list : " + str(res))
La lista original es: [{‘data’: [{‘rating’: 7, ‘price’: 4}, {‘rating’: 17, ‘price’: 8}], ‘id’: 1, ‘Gfg’ : 1}, {‘data’: [{‘rating’: 18, ‘price’: 19}], ‘id’: 2, ‘Gfg’: 1}]
La lista plana: [{‘price’: 4, ‘puntuación’: 7, ‘id’: 1, ‘Gfg’: 1}, {‘price’: 8, ‘rating’: 17, ‘id’: 1, ‘Gfg’: 1}, {‘price’: 19, ‘calificación’: 18, ‘id’: 2, ‘Gfg’: 1}]
Método n.º 2: usar la comprensión de listas + zip() + itemgetter()
La combinación de las funciones anteriores se puede usar para realizar esta tarea. En esto, extraemos los pares requeridos usando itemgetter() y combinamos pares usando zip(). La compilación de datos está utilizando la comprensión de listas.
# Python3 code to demonstrate working of # Flatten Nested Keys # Using list comprehension + zip() + itemgetter() from operator import itemgetter # initializing list test_list = [{'Gfg' : 1, 'id' : 1, 'data' : [{'rating' : 7, 'price' : 4}, {'rating' : 17, 'price' : 8}]}, {'Gfg' : 1, 'id' : 2, 'data' : [{'rating' : 18, 'price' : 19}]}] # printing original list print("The original list is : " + str(test_list)) # initializing base and flatten keys base_keys = 'Gfg', 'id' flatten_keys = 'rating', 'price' # Flatten Nested Keys # Using list comprehension + zip() + itemgetter() res = [dict(zip(base_keys + flatten_keys, itemgetter(*base_keys)(sub) + itemgetter(*flatten_keys)(data))) for sub in test_list for data in sub['data']] # printing result print("The flattened list : " + str(res))
La lista original es: [{‘data’: [{‘rating’: 7, ‘price’: 4}, {‘rating’: 17, ‘price’: 8}], ‘id’: 1, ‘Gfg’ : 1}, {‘data’: [{‘rating’: 18, ‘price’: 19}], ‘id’: 2, ‘Gfg’: 1}]
La lista plana: [{‘price’: 4, ‘puntuación’: 7, ‘id’: 1, ‘Gfg’: 1}, {‘price’: 8, ‘rating’: 17, ‘id’: 1, ‘Gfg’: 1}, {‘price’: 19, ‘calificación’: 18, ‘id’: 2, ‘Gfg’: 1}]
Publicación traducida automáticamente
Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA