Python: registros de grupo en elementos de índice similares

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)) 
Producción :

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)) 
Producción :

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *