← Все вопросы
Как сгруппировать элементы в словарь списков?
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.
Ваш ответ
Войдите, чтобы ответить на вопрос.