Есть список заказов 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 ...} кладёт в значение целиком сам заказ, а нам нужна только сумма.

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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