Есть список заказов 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] в список строк только для положительных значений. Какой вариант обычно читается проще?
Тренировать Python в Telegram

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