Introducción
En Python, podemos agrupar los elementos de una lista basados en una función dada. Esto puede ser útil en muchas situaciones, como cuando queremos agrupar una lista de palabras por su longitud o una lista de números por su paridad. En este desafío, se te pedirá escribir una función que agrupe los elementos de una lista basados en una función dada.
Agrupar elementos de una lista
Escribe una función group_by(lst, fn) que tome una lista lst y una función fn como argumentos y devuelva un diccionario donde las claves son los resultados de aplicar fn a los elementos de lst y los valores son listas de elementos de lst que producen la clave correspondiente cuando fn se aplica a ellos.
Por ejemplo, si tenemos una lista de números [6.1, 4.2, 6.3] y queremos agruparlos por su parte entera, podemos usar la función floor del módulo math como función de agrupamiento. La salida esperada sería {4: [4.2], 6: [6.1, 6.3]}.
from collections import defaultdict
def group_by(lst, fn):
d = defaultdict(list)
for el in lst:
d[fn(el)].append(el)
return dict(d)
from math import floor
group_by([6.1, 4.2, 6.3], floor) ## {4: [4.2], 6: [6.1, 6.3]}
group_by(['one', 'two', 'three'], len) ## {3: ['one', 'two'], 5: ['three']}
Resumen
En este desafío, has aprendido cómo agrupar los elementos de una lista basados en una función dada. También has escrito una función que lo hace utilizando un diccionario para almacenar los grupos y un bucle para llenarlos. Esta es una técnica útil que se puede aplicar en muchos contextos diferentes.