Ошибка при многократном вызове функции/передача параметров

Есть код, который достает список рецептов из 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)

Если не вникать в детали, то все работает, но на самом деле есть две ошибки:

  1. При вводе get_shop_list_by_dishes(['Омлет', 'Омлет', 'Омлет', 'Омлет'], 1) результат будет некорректным, функция просто выведет результат для одного 'Омлета', а нужно чтобы для 4. Нужно чтобы такой ввод функция воспринимала так же как и get_shop_list_by_dishes(['Омлет', 4]).

  2. Если вызвать функцию с одинаковым запросом дважды - будет ошибка. Текст ошибки 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 | мл


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