Есть список словарей orders с ключами id и amount. Как получить сам заказ (словарь) с максимальным значением amount?
A
max(o["amount"] for o in orders)B
sorted(orders, key=lambda o: o["amount"])[-1]C
max(orders, key=lambda o: o["amount"])D
[o for o in orders if o["amount"] == max(orders)][0]Правильный ответ.
max(orders, key=...) возвращает сам элемент с максимумом по выбранному ключу, без сортировки и дополнительного перебора.Разбор
max(orders, key=lambda o: o['amount']) сравнивает заказы по полю amount и возвращает целиком тот словарь, у которого amount наибольший. max(o['amount'] for o in orders) возвращает только число, а не сам заказ. Сортировка списка с последующим взятием последнего элемента работает, но делает лишнюю работу за O(n log n) вместо O(n). Последний вариант пытается сравнить словарь с числом, что в Python 3 вообще приведёт к TypeError.
Проверь себя · 1/3разбор после ответа
Есть список email
emails = ["a@x.com", "b@y.com", "c@x.com"]. Нужно получить множество доменов (часть после @). Какой вариант корректен?Ещё вопросы по теме «Генераторы списков и встроенные функции»
- Дан список `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` с анонимными функциями?
- Все вопросы по «Генераторы списков и встроенные функции» →