cookidooAI/lista_zakupow.py

140 lines
5.6 KiB
Python

import json
from collections import defaultdict
# JSON wygenerowany przez AI
json_data = """
{
"1. Śniadanie": [
{"item": "mleko", "qty": 210, "unit": "g"},
{"item": "masło", "qty": 120, "unit": "g"},
{"item": "drożdże", "qty": 15, "unit": "g"},
{"item": "cukru", "qty": 1, "unit": "łyżeczka"},
{"item": "mąki pszennej", "qty": 450, "unit": "g"},
{"item": "sol", "qty": 1, "unit": "łyżeczka"},
{"item": "ziarna", "qty": 6, "unit": "łyżek"},
{"item": "jajko", "qty": 1, "unit": "szt."},
{"item": "koper", "qty": 6, "unit": "gałązek"},
{"item": "sałata lodowa", "qty": 4, "unit": "liści"},
{"item": "łosoś", "qty": 300, "unit": "g"},
{"item": "ogórki", "qty": 100, "unit": "g"},
{"item": "rzodkiewki", "qty": 80, "unit": "g"},
{"item": "awokado", "qty": 1, "unit": "szt."},
{"item": "ser kremowy", "qty": 100, "unit": "g"},
{"item": "szczypiorek", "qty": 2, "unit": "łyżek"},
{"item": "sól", "qty": 0.25, "unit": "łyżeczki"},
{"item": "pieprz", "qty": 2, "unit": "szczypty"}
],
"2. II Śniadanie": [
{"item": "koperek włoski", "qty": 2, "unit": "łyżeczki"},
{"item": "płatki chili", "qty": 1, "unit": "łyżeczka"},
{"item": "ser parmezan", "qty": 100, "unit": "g"},
{"item": "mąka pszenna", "qty": 150, "unit": "g"},
{"item": "masło", "qty": 100, "unit": "g"},
{"item": "żółtko", "qty": 1, "unit": "szt."},
{"item": "sól", "qty": 2, "unit": "szczypty"},
{"item": "jajko", "qty": 1, "unit": "szt."},
{"item": "sól morska", "qty": 0, "unit": "g"}
],
"3. Obiad": [
{"item": "orzeszki piniowe", "qty": 50, "unit": "g"},
{"item": "migdały", "qty": 50, "unit": "g"},
{"item": "oliwa z oliwek", "qty": 40, "unit": "g"},
{"item": "mięso mielone", "qty": 300, "unit": "g"},
{"item": "cynamon", "qty": 0.25, "unit": "łyżeczki"},
{"item": "gałka muszkatołowa", "qty": 0.25, "unit": "łyżeczki"},
{"item": "sól", "qty": 0.5, "unit": "łyżeczki"},
{"item": "pieprz", "qty": 0.25, "unit": "łyżeczki"},
{"item": "rodzynki", "qty": 80, "unit": "g"},
{"item": "śliwki suszone", "qty": 80, "unit": "g"},
{"item": "bułka tartą", "qty": 30, "unit": "g"},
{"item": "jajka", "qty": 2, "unit": "szt."},
{"item": "tuszka kurczaka", "qty": 1, "unit": "szt."},
{"item": "sól", "qty": 1.5, "unit": "łyżeczki"},
{"item": "pieprz", "qty": 0.5, "unit": "łyżeczki"},
{"item": "papryka słodka", "qty": 1, "unit": "łyżeczka"},
{"item": "oregano", "qty": 2, "unit": "łyżeczki"},
{"item": "cebula", "qty": 300, "unit": "g"},
{"item": "masło", "qty": 40, "unit": "g"},
{"item": "oliwa z oliwek", "qty": 20, "unit": "g"},
{"item": "wino białe", "qty": 360, "unit": "g"},
{"item": "woda", "qty": 200, "unit": "g"},
{"item": "sól", "qty": 0.5, "unit": "łyżeczki"},
{"item": "cukier", "qty": 1, "unit": "łyżeczka"},
{"item": "oliwa z oliwek", "qty": 0, "unit": "g"}
],
"4. Podwieczorek": [
{"item": "rzodkiewki", "qty": 1, "unit": "pęczek"},
{"item": "sól", "qty": 5, "unit": "szczypt"},
{"item": "śmietana", "qty": 200, "unit": "g"},
{"item": "mleko", "qty": 120, "unit": "g"},
{"item": "koncentrat bulionu", "qty": 1, "unit": "łyżeczka"},
{"item": "pieprz", "qty": 2, "unit": "szczypty"},
{"item": "agar", "qty": 1, "unit": "płaska łyżeczka"},
{"item": "ser kozie", "qty": 100, "unit": "g"},
{"item": "jogurt grecki", "qty": 50, "unit": "g"}
],
"5. Kolacja": [
{"item": "rzodkiewki", "qty": 1, "unit": "pęczek"},
{"item": "sól", "qty": 5, "unit": "szczypt"},
{"item": "śmietana", "qty": 200, "unit": "g"},
{"item": "mleko", "qty": 120, "unit": "g"},
{"item": "koncentrat bulionu", "qty": 1, "unit": "łyżeczka"},
{"item": "pieprz", "qty": 2, "unit": "szczypty"},
{"item": "agar", "qty": 1, "unit": "płaska łyżeczka"},
{"item": "ser kozie", "qty": 100, "unit": "g"},
{"item": "jogurt grecki", "qty": 50, "unit": "g"}
]
}
"""
def normalize_unit(u):
u = u.lower().strip().replace(".", "")
if "ząb" in u: return "ząbek"
if "łyżeczk" in u: return "łyżeczka"
if "łyżk" in u: return "łyżka"
if u in ["szt", "sztuka", "sztuki"]: return "szt"
if u in ["g", "gram", "gramów"]: return "g"
return u
def normalize_name(n):
n = n.lower().strip()
# Mapowanie liczby mnogiej na pojedynczą (synonimy)
synonyms = {
"jajka": "jajko",
"ziemniaki": "ziemniak",
"ząbki czosnku": "czosnek",
"ząbek czosnku": "czosnek",
"filety z piersi kurczaka": "filet z piersi kurczaka"
}
return synonyms.get(n, n)
data = json.loads(json_data)
shopping_list = defaultdict(lambda: defaultdict(float))
for meal_name, ingredients in data.items():
for item in ingredients:
name = normalize_name(item['item'])
unit = normalize_unit(item['unit'])
qty = item['qty']
shopping_list[name][unit] += qty
# Wyświetlanie jako lista Markdown do odhaczenia
print("## Lista Zakupów\n")
for product, units in sorted(shopping_list.items()):
details = []
for unit, total in units.items():
if total == 0:
# Obsługa produktów bez konkretnej ilości (np. "do natłuszczenia")
details.append(f"wg uznania ({unit})")
else:
# Formatowanie liczby: usuwamy .0 jeśli to liczba całkowita
qty_str = f"{int(total)}" if total.is_integer() else f"{round(total, 2)}"
details.append(f"{qty_str} {unit}")
# Formatowanie linii Markdown: - [ ] Produkt: ilość, ilość
print(f"- [ ] **{product.capitalize()}**: {', '.join(details)}")