Есть список словарей 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.

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

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

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

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

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