Есть список словарей 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 найдёт товар с алфавитно первым именем, а не с минимальной ценой.

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

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

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

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

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