Python·100 вопросов

Как группировать элементы списка по ключу?

Ответ

Группировка элементов по определенному признаку — это классическая задача при обработке информации в программировании. В языке Python существует несколько стандартных и наиболее эффективных подходов к решению этой задачи в зависимости от объема входных данных и структуры коллекции.

Для небольших или умеренных объемов данных идеальным инструментом является структура defaultdict из модуля collections. Создав словарь со значением по умолчанию в виде списка, можно последовательно обходить исходную коллекцию и добавлять элементы методом append к соответствующей группе. Такой подход интуитивно понятен и требует минимального количества строк кода.

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

Когда объемы данных становятся очень большими, стандартный defaultdict может потреблять слишком много оперативной памяти. В таких ситуациях применяется функция groupby из модуля itertools. Главным условием ее корректной работы является предварительная сортировка входной последовательности по тому же ключу, который используется для группировки.

Импортируйте defaultdict из модуля collections для реализации простой группировки в памяти.
Инициализируйте словарь группировки командой groups = defaultdict(list).
Пройдите циклом по исходной коллекции и добавьте каждый элемент через groups[key_func(item)].append(item).
Для больших массивов данных импортируйте groupby из модуля itertools.
Обязательно отсортируйте исходные данные по ключу группировки перед передачей в функцию groupby.
Полезен ли этот ответ?

Другие вопросы этой темы

Связанные вопросы из других тем