Regrouper les éléments d'une liste

Beginner

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

Introduction

En Python, nous pouvons regrouper les éléments d'une liste sur la base d'une fonction donnée. Cela peut être utile dans de nombreuses situations, par exemple lorsque nous voulons regrouper une liste de mots par leur longueur ou une liste de nombres par leur parité. Dans ce défi, vous devrez écrire une fonction qui regroupe les éléments d'une liste sur la base d'une fonction donnée.

Regrouper les éléments d'une liste

Écrivez une fonction group_by(lst, fn) qui prend une liste lst et une fonction fn en arguments et renvoie un dictionnaire dont les clés sont les résultats de l'application de fn aux éléments de lst et les valeurs sont des listes d'éléments de lst qui produisent la clé correspondante lorsqu'on leur applique fn.

Par exemple, si nous avons une liste de nombres [6.1, 4.2, 6.3] et que nous voulons les regrouper par leur partie entière, nous pouvons utiliser la fonction floor du module math comme fonction de regroupement. La sortie attendue serait {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']}

Sommaire

Dans ce défi, vous avez appris à regrouper les éléments d'une liste sur la base d'une fonction donnée. Vous avez également écrit une fonction qui le fait en utilisant un dictionnaire pour stocker les groupes et une boucle pour les remplir. Il s'agit d'une technique utile qui peut être appliquée dans de nombreux contextes différents.