Есть список словарей orders с ключами id и amount. Как получить сам заказ (словарь) с максимальным значением amount?

Amax(o["amount"] for o in orders)
Bsorted(orders, key=lambda o: o["amount"])[-1]
Cmax(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"]. Нужно получить множество доменов (часть после @). Какой вариант корректен?
Тренировать Python в Telegram

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