Есть список словарей users, где у некоторых пользователей отсутствует email (например, u.get("email") возвращает None). Нужно получить список email в нижнем регистре, пропуская отсутствующие. Какой вариант обычно наиболее читаемый?

Alist(map(lambda u: u["email"].lower(), filter(lambda u: u.get("email"), users)))
B[u["email"].lower() for u in users if u.get("email")]
Cany(u.get("email") for u in users)
D{u["email"].lower() for u in users if u.get("email")}
Правильный ответ. Комбинация фильтрации и преобразования часто читается проще в одной list comprehension, чем через вложенные map()/filter() с lambda.

Разбор

List comprehension сразу показывает намерение: «возьми email и приведи к нижнему регистру для каждого пользователя, у которого есть email». Вариант с map() и filter() плюс два lambda усложняет чтение: приходится разбирать вложенные вызовы, чтобы понять порядок действий.

Проверь себя · 1/3разбор после ответа
Есть список словарей users, где у некоторых пользователей отсутствует email (например, u.get("email") возвращает None). Нужно получить список email в нижнем регистре, пропуская отсутствующие. Какой вариант обычно наиболее читаемый?
Тренировать Python в Telegram

Ещё вопросы по теме «Генераторы списков и встроенные функции»