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)}")