Группировка элементов списка

Beginner

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

Введение

В Python мы можем группировать элементы списка на основе заданной функции. Это может быть полезно в многих ситуациях, например, когда мы хотим сгруппировать список слов по их длине или список чисел по их четности. В этом испытании вас попросят написать функцию, которая группирует элементы списка на основе заданной функции.

Группировка элементов списка

Напишите функцию group_by(lst, fn), которая принимает список lst и функцию fn в качестве аргументов и возвращает словарь, где ключами являются результаты применения fn к элементам lst, а значениями - списки элементов из lst, которые при применении fn к ним дают соответствующий ключ.

Например, если у нас есть список чисел [6.1, 4.2, 6.3] и мы хотим сгруппировать их по целой части, мы можем использовать функцию floor из модуля math в качестве функции группировки. Ожидаемый вывод будет {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']}

Резюме

В этом испытании вы узнали, как группировать элементы списка на основе заданной функции. Вы также написали функцию, которая делает это с использованием словаря для хранения групп и цикла для заполнения их. Это полезный метод, который можно применить в различных контекстах.