Есть список словарей products с ключами name и price. Нужно получить name самого дешёвого товара. Какой код корректен и наиболее краток?
A
min([p["name"] for p in products if p["price"]])B
sorted(products, key=lambda p: p["price"])[0]C
min(products, key=lambda p: p["name"])["name"]D
min(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 (предполагаем, что значения уникальны). Какой вариант корректен?Ещё вопросы по теме «Генераторы списков и встроенные функции»
- Дан список `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` с анонимными функциями?
- Все вопросы по «Генераторы списков и встроенные функции» →