В результате получаем словарь примерно такого вида:
data = {
"category1": [item1, item2, ...],
"category2": [item1, item2, ...],
...
}
При этом заранее мы не знаем список категорий и их необходимо добавлять в процессе итерации. Как такой код будет выглядеть:items = [...]Значением ключа является не сам элемент а промежуточный объект это список. Потому нам следует сначала убедиться, что он есть, а если нету то создать.
sorted_items = {}
for item in items:
cat = get_category(item)
if cat not in sorted_items:
sorted_items[cat] = []
sorted_items[cat].append(item)
Альтернативный код делающий тоже самое:
for item in items:Чтобы избежать этой проверки можно использовать тип defaultdict, это очень простой класс который сам за вас сделает проверку и добавит нужный тип если его нет. Просто укажите нужный тип в конструкторе.
cat = get_category(item)
if cat not in sorted_items:
sorted_items[cat] = [item]
else:
sorted_items[cat].append(item)
from collections import defauldictЕсли указанного ключа нет в словаре, то он создаётся сразу со списком в значении и возвращается как будто он там и был.
items = [...]
sorted_items = defaultdict(list)
for item in items:
sorted_items[get_category(item)].append(item)
#tricks #libs