
Урок 5. Частные случаи идиомы reduce - all, any
Первое самостоятельное задание:
Найди сумму максимальных зарплат всех программистов. (вполне себе решается при помощи sum, map и max).
Правильно ли я понимаю суть задания: Необходимо из списка ljudi отобрать программистов, потом у этих программистов проанализировать зарплаты по разным должностям и выбрать максимальные, а затем просуммировать эти зарплаты по всем программистам.
Я решил двумя способами (один с применением filter, другой без):
Решение 1:
sum(map(lambda p: max(p['dolzhnosti'], key = lambda d: d['zarplata'])['zarplata'], filter(lambda p: any(map(lambda d: d['nazvanie'] == 'programmist' , p['dolzhnosti'])), ljudi)))
Решение 2:
sum(map(lambda p: (any(map(lambda d: d['nazvanie'] == 'programmist' ,p['dolzhnosti'])) * max(p['dolzhnosti'], key = lambda d: d['zarplata'])['zarplata']), ljudi))
Результат одинаковый: 300 000.
Но система дальше не идет. В чем моя ошибка?
Answer

Еще перепроверю в самом уроке. Но, возможно, там нужно было брать всех сотрудников отдела программистов (если такой есть).

Еще перепроверю в самом уроке. Но, возможно, там нужно было брать всех сотрудников отдела программистов (если такой есть).
А вашему пониманию задачи решение соответствует, косяков нет.

Понятие "отдела" в задании нет. Поэтому если понимать формулировку задания буквально, то нужно решать как было решено у меня. Но программа пропускает дальше, если брать всех людей, а не только программистов. Поэтому думаю, что корректнее будет изменить формулировку задания: Найти максимальную сумму зарплат всех людей из списка ljudi.

Как вы и написали в комментариях - подразумевалось, что надо найти сумму у всех людей из списка, а не только программистов.
Спасибо, за баг-репорт. Поправим текст задания!
Customer support service by UserEcho
Как вы и написали в комментариях - подразумевалось, что надо найти сумму у всех людей из списка, а не только программистов.
Спасибо, за баг-репорт. Поправим текст задания!