Вывести общую стоимость просроченных медикаментов

В текстовом файле заданны названия лекарств, срок их годности, кол-во стандартов и стоимость одного стандарта. Вывеси на экран данные по лекарствам с истекшим сроком годности на сегодняшний день и подсчитать общую сумму таких медикаментов. Я не знаю как правильно записать. Моя идея не работала.

from functools import reduce
import datetime

nowdate = datetime.date(2021, 2, 12)
lekarstva = [
    {'nazvanie': 'Аспирин', 'srokgodnosti': datetime.date(1999, 4, 15), 'kol-vostandartov': 127, 'stoimostodnogostandarta': 1.35},
    {'nazvanie': 'Цитромон', 'srokgodnosti': datetime.date(2001, 2, 1), 'kol-vostandartov': 76, 'stoimostodnogostandarta': 0.8},
    {'nazvanie': 'Алфлутоп', 'srokgodnosti': datetime.date(1993, 3, 25), 'kol-vostandartov': 28, 'stoimostodnogostandarta': 1.42},
    {'nazvanie': 'Спазмалгон', 'srokgodnosti': datetime.date(2003, 12, 3), 'kol-vostandartov': 312, 'stoimostodnogostandarta': 1.91},
    {'nazvanie': 'Шиза', 'srokgodnosti': datetime.date(2023, 7, 17), 'kol-vostandartov': 5, 'stoimostodnogostandarta': 4.67}
     ]
for i in lekarstva:
    for key, value in i.items():
        if key == 'srokgodnosti' and value < nowdate:
            print(i)
            x = list(i)
            break
for ii in x:
    for kkey, valuess in ii.items():
        if kkey == 'kol-vostandartov' and valuess == 'stoimostodnogostandarta':
                reduce(lambda kkey, values: kkey * valuess)
                print(ii)

Ответы (1 шт):

Автор решения: Jack_oS
import datetime

nowdate = datetime.date(2021, 2, 12)
lekarstva = [
    {'nazvanie': 'Аспирин', 'srokgodnosti': datetime.date(1999, 4, 15), 'kol-vostandartov': 127, 'stoimostodnogostandarta': 1.35},
    {'nazvanie': 'Цитромон', 'srokgodnosti': datetime.date(2001, 2, 1), 'kol-vostandartov': 76, 'stoimostodnogostandarta': 0.8},
    {'nazvanie': 'Алфлутоп', 'srokgodnosti': datetime.date(1993, 3, 25), 'kol-vostandartov': 28, 'stoimostodnogostandarta': 1.42},
    {'nazvanie': 'Спазмалгон', 'srokgodnosti': datetime.date(2003, 12, 3), 'kol-vostandartov': 312, 'stoimostodnogostandarta': 1.91},
    {'nazvanie': 'Шиза', 'srokgodnosti': datetime.date(2023, 7, 17), 'kol-vostandartov': 5, 'stoimostodnogostandarta': 4.67}
]

Список с истекшим сроком годности:

foo_lekarstva = [i for i in lekarstva if i['srokgodnosti'] < nowdate]
>>> foo_lekarstva
[{'nazvanie': 'Аспирин', 'srokgodnosti': datetime.date(1999, 4, 15), 'kol-vostandartov': 127, 'stoimostodnogostandarta': 1.35}, {'nazvanie': 'Цитромон', 'srokgodnosti': datetime.date(2001, 2, 1), 'kol-vostandartov': 76, 'stoimostodnogostandarta': 0.8}, {'nazvanie': 'Алфлутоп', 'srokgodnosti': datetime.date(1993, 3, 25), 'kol-vostandartov': 28, 'stoimostodnogostandarta': 1.42}, {'nazvanie': 'Спазмалгон', 'srokgodnosti': datetime.date(2003, 12, 3), 'kol-vostandartov': 312, 'stoimostodnogostandarta': 1.91}]

Количество таких лекарств:

>>> len(foo_lekarstva)
4

Общая стоимость total_cost в этом списке:

total_cost = 0
for i in foo_lekarstva:
    total_cost += i['kol-vostandartov'] * i['stoimostodnogostandarta']

с округлением до второй цифры после запятой:

>>> round(total_cost, 2)
867.93
→ Ссылка