Ошибка при многократном вызове функции/передача параметров
Есть код, который достает список рецептов из txt файла, обрабатывает его (в этой части вроде бы все в порядке), после этого инфа передается в функцию, которая считает кол-во ингредиентов исходя из кол-ва персон, вот код:
dish_name = 1
ing_count = 2
ingredients = 3
cook_book = {}
dish = dish_name
with open('recipes.txt', encoding='UTF-8') as file:
for line in file:
line = line.strip()
if not line: continue
if dish == dish_name:
title = line
cook_book[title] = []
dish = ing_count
elif dish == ing_count:
count = int(line)
dish = ingredients
else:
if dish == ingredients:
data = [x.strip() for x in line.split('|')]
data[1] = int(data[1])
cook_book[title].append(dict(zip(('ingredient_name', 'quantity', 'measure'), data)))
count -= 1
if count == 0:
dish = dish_name
def get_shop_list_by_dishes(person_count, dishes):
for k, v in cook_book.items():
if dishes.count(k) > 0:
for i in v:
x = {}
x[i['ingredient_name']] = i
del i['ingredient_name']
for y in x.values():
y['quantity'] = y['quantity'] * person_count
print(x)
Если не вникать в детали, то все работает, но на самом деле есть две ошибки:
При вводе get_shop_list_by_dishes(['Омлет', 'Омлет', 'Омлет', 'Омлет'], 1) результат будет некорректным, функция просто выведет результат для одного 'Омлета', а нужно чтобы для 4. Нужно чтобы такой ввод функция воспринимала так же как и get_shop_list_by_dishes(['Омлет', 4]).
Если вызвать функцию с одинаковым запросом дважды - будет ошибка. Текст ошибки x[i['ingredient_name']] = i KeyError: 'ingredient_name'. Как это исправить?
Функция должна возвращать такую структуру данных:
{
'Картофель': {'measure': 'кг', 'quantity': 2},
'Молоко': {'measure': 'мл', 'quantity': 200},
'Помидор': {'measure': 'шт', 'quantity': 4},
'Сыр гауда': {'measure': 'г', 'quantity': 200},
'Яйцо': {'measure': 'шт', 'quantity': 4},
'Чеснок': {'measure': 'зубч', 'quantity': 6}
}
Внутри файла txt:
Омлет
3
Яйцо | 2 | шт
Молоко | 100 | мл
Помидор | 2 | шт
Утка по-пекински
4
Утка | 1 | шт
Вода | 2 | л
Мед | 3 | ст.л
Соевый соус | 60 | мл