← Все вопросы

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

Задан 6 месяцев назад699 просмотров3 ответа
15

Есть список пар (категория, значение), хочу собрать словарь, где ключ — категория, а значение — список всех её элементов.

pairs = [("фрукт", "яблоко"), ("овощ", "лук"), ("фрукт", "груша")]
# нужно {"фрукт": ["яблоко", "груша"], "овощ": ["лук"]}

3 ответа

25
✓ Принятый ответ — помог автору

Классический случай для defaultdict(list) — не надо проверять, есть ли уже ключ:

from collections import defaultdict
groups = defaultdict(list)
for cat, item in pairs:
    groups[cat].append(item)
# при первом обращении к новому ключу автоматически создаётся []

Если в конце нужен обычный dict (например, чтобы случайное обращение к несуществующему ключу не плодило пустые списки), приведи: dict(groups).

Максим Николаев defaultdict — то, что нужно, без него цикл вдвое длиннее · 5 месяцев назад
11

Без импортов через setdefault:

groups = {}
for cat, item in pairs:
    groups.setdefault(cat, []).append(item)
Даулет Хатуев setdefault тут идеально подходит · 5 месяцев назад
4

defaultdict(list) и .append.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект