TGViewer
Python Заметки Python Заметки @pythonotes · 2.2K subscribers
Post #96 553
Бывают задачи когда из большого массива объектов требуется отфильтровать эти объекты по категориям.
В результате получаем словарь примерно такого вида:

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:
cat = get_category(item)
if cat not in sorted_items:
sorted_items[cat] = [item]
else:
sorted_items[cat].append(item)

Чтобы избежать этой проверки можно использовать тип defaultdict, это очень простой класс который сам за вас сделает проверку и добавит нужный тип если его нет. Просто укажите нужный тип в конструкторе.

from collections import defauldict

items = [...]
sorted_items = defaultdict(list)

for item in items:
sorted_items[get_category(item)].append(item)

Если указанного ключа нет в словаре, то он создаётся сразу со списком в значении и возвращается как будто он там и был.

#tricks #libs
More from @pythonotes
  1. Sep 21, 2026­ WebAssembly это мощная технология позволяющая загружать практически любое приложение в б…
  2. Aug 17, 2026Не так давно столкнулся с API который в ответе с ошибкой присылал только статус-код. Без п…
  3. Jul 20, 2026У меня основная ОС это Linux. Но нередко требуется делать сборку клиента под Windows. Соби…
  4. Jul 13, 2026В прошлый раз был пример с понижением привелегий процесса. Проблема в том, что обратно под…
  5. Jul 6, 2026Модуль pwd может использоваться для считывания информации о пользователях из базы данных п…
  6. Jun 22, 2026Недавно я реализовал Multi Tenancy систему на FastAPI + SQLAlchemy и пересобрал её в небол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →