Agrupar elementos de una lista

Beginner

This tutorial is from open-source community. Access the source code

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.