Есть список словарей products с ключами name и price. Нужно получить name самого дешёвого товара. Какой код корректен и наиболее краток?

Amin([p["name"] for p in products if p["price"]])
Bsorted(products, key=lambda p: p["price"])[0]
Cmin(products, key=lambda p: p["name"])["name"]
Dmin(products, key=lambda p: p["price"])["name"]
Правильный ответ. Чтобы выбрать объект с минимальным значением поля, используйте min(iterable, key=...), а затем возьмите нужный ключ.

Разбор

Вызов min(products, key=lambda p: p["price"]) находит словарь товара с минимальной ценой, после чего из него можно достать поле "name". Вариант min(p["price"] for p in products) вернёт только минимальную цену (число), а не имя. sorted(...)[0] вернёт целый словарь, но не извлекает name и работает за O(n log n) вместо O(n). Сортировка с ключом по name найдёт товар с алфавитно первым именем, а не с минимальной ценой.

Проверь себя · 1/3разбор после ответа
Есть словарь code_to_name = {"RU": "Russia", "FR": "France"}. Нужно получить обратное отображение name_to_code (предполагаем, что значения уникальны). Какой вариант корректен?
Тренировать Python в Telegram

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