A veces, mientras trabajamos con registros de Python, podemos tener un problema en el que necesitamos realizar la agrupación de un índice particular de tupla, en función de la similitud del resto de los índices. Este tipo de problemas pueden tener posible aplicación en el dominio del desarrollo Web. Analicemos ciertas formas en que se puede realizar esta tarea.
Entrada : test_list = [(4, 5, 10), (4, 5, 7), (4, 5, 12)]
Salida : ((4, 5, [10, 7, 12]), )Entrada : test_list = [(4, 5, 10)]
Salida : [(4, 5, [10])]
Método n.º 1: usar el defaultdict()
bucle +
La combinación de las funciones anteriores ofrece un enfoque bruto para resolver este problema. En esto, agrupamos elementos y club en uno usando defaultdict() sobre la base de la igualdad del resto de elementos.
# Python3 code to demonstrate working of # Group Records on Similar index elements # Using defaultdict() + loop from collections import defaultdict # initializing list test_list = [(4, 7, 13), (4, 5, 7), (6, 7, 10), (4, 5, 15), (6, 7, 12)] # printing original list print("The original list is : " + str(test_list)) # Group Records on Similar index elements # Using defaultdict() + loop temp = defaultdict(list) for a, b, c in test_list: temp[a, b].append(c) res = tuple((*key, val) for key, val in temp.items()) # printing result print("Tuples after grouping : " + str(res))
The original list is : [(4, 7, 13), (4, 5, 7), (6, 7, 10), (4, 5, 15), (6, 7, 12)] Tuples after grouping : ((4, 7, [13]), (4, 5, [7, 15]), (6, 7, [10, 12]))
Método #2: Usar groupby() + generator expression
Las combinaciones de las funciones anteriores se pueden usar para resolver este problema. En esto, realizamos la agrupación de todos los elementos usando groupby() y la generación de la lista de tuplas usando la expresión del generador. Necesita una lista ordenada para este método.
# Python3 code to demonstrate working of # Group Records on Similar index elements # Using groupby() + generator expression from itertools import groupby # initializing list test_list = [(4, 7, 13), (4, 5, 7), (6, 7, 10), (4, 5, 15), (6, 7, 12)] # printing original list print("The original list is : " + str(test_list)) # Group Records on Similar index elements # Using groupby() + generator expression test_list.sort() res = tuple((*key, [tup[-1] for tup in val]) for key, val in groupby(test_list, lambda tup: tup[:2])) # printing result print("Tuples after grouping : " + str(res))
The original list is : [(4, 7, 13), (4, 5, 7), (6, 7, 10), (4, 5, 15), (6, 7, 12)] Tuples after grouping : ((4, 7, [13]), (4, 5, [7, 15]), (6, 7, [10, 12]))
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