Нарезка · Шаг 2 из 4
Отбор на лету
Из выгрузки на миллион строк бухгалтерии нужны обычно не все, а по одному городу или за один год. Отобрать их лучше по дороге: тогда и частей получится меньше, и лишнее не поедет через весь конвейер.
Что сделать
Отбирайте записи по условию прямо по дороге — чтобы лишнее не ехало через весь конвейер.
Что приходит
zapisi— поток записей, словари «колонка → значение»uslovie— словарь «колонка → искомое значение»
Что вернуть
Генератор: отдаёт по одной записи, у которых каждая колонка из uslovie равна искомому; пустое условие пропускает всё; нет колонки — запись не подходит.
Допишите функцию otobrat в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В проекте
Утилита ставит ваш отбор между чтением и нарезкой, если в командной строке задано --gde колонка=значение. Решите шаг — и в части попадут только нужные записи.
zapisi = [{"imya": "Анна", "gorod": "Тверь"},
{"imya": "Борис", "gorod": "Омск"},
{"imya": "Вера", "gorod": "Тверь"}]
list(otobrat(zapisi, {"gorod": "Тверь"}))
[{'imya': 'Анна', 'gorod': 'Тверь'}, {'imya': 'Вера', 'gorod': 'Тверь'}]
Функция принимает поток записей (словари «колонка → значение») и условие — словарь «колонка → искомое значение». Отдаёт по одной те записи, у которых КАЖДАЯ колонка из условия совпадает с искомым значением. Пустое условие пропускает все записи. Если в записи нет колонки из условия, запись не подходит. Записи отдаются по мере прохождения потока, а не после него.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.