


Когда отчёту нужны три крупнейших заказа, передайте записи в heapq.nlargest() и укажите поле суммы через key. Функция вернёт сами записи в порядке убывания ключа. На Mentoring.digital покажем, как сохранить идентификатор заказа и получить определённый порядок при равных суммах.
Суммы в примере заданы целыми копейками. itemgetter читает ключ из словаря. Параметр n задаёт максимальное число записей в результате.
from heapq import nlargest
from operator import itemgetter
orders = [
{"id": 11, "total": 8300},
{"id": 12, "total": 12500},
{"id": 13, "total": 4100},
{"id": 14, "total": 9800},
]
top = nlargest(3, iter(orders), key=itemgetter("total"))
print([order["id"] for order in top])
# [12, 14, 11]
iter(orders) здесь показывает, что функции подходит итерируемый источник. Если данные приходят из генератора, он будет исчерпан после отбора. При повторном чтении создайте новый генератор.
Если в отчёте при равной сумме первым должен идти меньший числовой ID, задайте ключ lambda order: (order["total"], -order["id"]). Поскольку nlargest выбирает большие ключи, отрицательный ID задаёт нужный порядок для второй части пары. Проверьте правило двумя заказами с одинаковой суммой на границе топа.
max(orders, key=itemgetter("total"), default=None), если допустим пустой набор.nlargest. Пустой источник возвращает пустой список. Если записей меньше запрошенного числа, функция вернёт все доступные.sorted(). Скорость на своих данных проверяйте отдельно.Задачу можно продолжить на практике по Python или попросить наставника по Python посмотреть, как отчёт обрабатывает равные суммы и пустую выборку.