В данных пользователей поле города может отсутствовать. Нужно получить множество уникальных городов в нижнем регистре, пропуская отсутствующие значения. Какой вариант подходит?

A[u['city'].lower() for u in users if u.get('city')]
B{u['city'].lower() for u in users if u.get('city')}
Cset(u['city'].lower() for u in users)
D{u['city'] for u in users if u.get('city')}
Правильный ответ. Множество с .lower() и фильтром по непустому полю даёт уникальные города в нижнем регистре без отсутствующих значений.

Разбор

Конструкция {u['city'].lower() for u in users if u.get('city')} использует множество (фигурные скобки без двоеточия), приводит каждый город к нижнему регистру и заранее отбрасывает записи с отсутствующим или пустым city. Вариант с квадратными скобками — это список, в нём останутся дубликаты. Вариант set(u['city'].lower() for u in users) упадёт на отсутствующих ключах, потому что фильтра нет. Последний вариант сохраняет регистр, поэтому одинаковые города в разном регистре будут считаться разными.

Проверь себя · 1/3разбор после ответа
Нужно получить список строк без пустых значений из items. Вы решили использовать filter(), и хотите избежать лишнего lambda. Какой вариант лучше?
Тренировать Python в Telegram

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