Есть список заказов orders, каждый элемент — словарь с ключами id и amount. Нужно собрать словарь id -> amount только для заказов с amount > 0. Какой код корректен?
A
[(o['id'], o['amount']) for o in orders if o['amount'] > 0]B
{(o['id'], o['amount']) for o in orders if o['amount'] > 0}C
{o['id']: o['amount'] for o in orders if o['amount'] > 0}D
{o['id']: o for o in orders if o['amount'] > 0}Правильный ответ. Словарное включение
{ключ: значение for ... if ...} создаёт словарь нужных пар, добавляя фильтр по сумме.Разбор
Для словаря id -> amount нужно явно задать пары o['id']: o['amount'] и оставить только заказы с amount > 0. Списочное включение с кортежами вернёт список пар, а не словарь. Конструкция в фигурных скобках без двоеточия создаёт множество пар, а не словарь. Вариант {o['id']: o for ...} кладёт в значение целиком сам заказ, а нам нужна только сумма.
Проверь себя · 1/3разбор после ответа
Нужно преобразовать
user_ids = [1, -1, 2] в список строк только для положительных значений. Какой вариант обычно читается проще?Ещё вопросы по теме «Генераторы списков и встроенные функции»
- Дан список `xs = [1, -2, 3, 0]`. Что вернёт выражение `[x * 2 for x in xs if x > 0]`?
- Есть список словарей `users`, где у некоторых пользователей отсутствует email (например, `u.get("email")` возвращает `None`). Нужно получить список email в нижнем регистре, пропуская отсутствующие. Какой вариант обычно наиболее читаемый?
- Дан список батчей `batches = [[101, 102], [], [103]]`. Что вернёт выражение `[x for batch in batches for x in batch]`?
- Дан список `vals = [0, 1, 2]`. Что вернёт выражение `[x if x % 2 == 0 else -1 for x in vals]`?
- У вас есть список словарей `users` с ключами `id` и `is_active`. Нужно получить список идентификаторов только активных пользователей. Какое решение обычно проще читать, чем комбинация `map` и `filter` с анонимными функциями?
- Все вопросы по «Генераторы списков и встроенные функции» →