Карбонара
Карбонара
Бекон, сыры чеддер и пармезан, моцарелла, томаты, красный лук, чеснок, фирменный соус альфредо, итальянские травы

Средняя 30 см - 859.0
Карбонара
Карбонара
Бекон, сыры чеддер и пармезан, моцарелла, томаты, красный лук, чеснок, фирменный соус альфредо, итальянские травы

Средняя 30 см - 859.0

Помоги избавиться от этих дубликатов. Нужно, чтоб код сам убирал такие дубликаты, где совпадает абсолютно все. 

import json
from collections import defaultdict


def clean_product_data(product):
    keys_to_exclude = {"toppings", "size", "foodValue", "allergens", "allergensCanContain", "ingredients"}
    cleaned_product = {key: value for key, value in product.items() if key not in keys_to_exclude}
    return cleaned_product


def extract_data_by_id(data, target_id):
    result = {
        "item": None,
        "products": [],
        "sizeGroups": [],
        "menuCategory": None
    }

    for item in data.get("items", []):
        if item.get("id") == target_id:
            result["item"] = item
            break

    if result["item"]:
        for product in data.get("products", []):
            if product.get("pizzaId") == target_id:
                cleaned_product = clean_product_data(product)

                # Находим цены для текущего продукта
                for shopping_item in result["item"].get("shoppingItems", []):
                    if shopping_item.get("productId") == cleaned_product.get("id"):
                        cleaned_product["price"] = shopping_item.get("price")
                        cleaned_product["sizeSchemeId"] = product["sizeSchemeId"]  # Сохраняем sizeSchemeId
                        result["products"].append(cleaned_product)
                        break

    # Теперь определим размерность товаров
    for product in result["products"]:
        size_scheme_id = product.get("sizeSchemeId")
        for scheme in data.get("productSchemes", {}).get("sizeSchemes", []):
            if scheme.get("id") == size_scheme_id:
                for size_group in scheme.get("sizeGroups", []):
                    if size_group["size"] == product["sizeGroup"]:
                        product["size"] = size_group["name"]  # Добавляем размер в product
                        break
                break

    # Остальная часть extract_data_by_id
    # ...

    return result


def generate_html(all_data):
    html = """
    <!DOCTYPE html>
    <html>
    <head>
        <title>Меню</title>
        <style>
            body {
                font-family: sans-serif;
            }
            .category {
                margin-bottom: 20px;
            }
            .product {
                border: 1px solid #ddd;
                padding: 10px;
                margin-bottom: 10px;
            }
            .product img {
                max-width: 100px;
                max-height: 100px;
            }
            .navigation {
                text-align: center;
                margin-bottom: 20px;
            }
            .navigation button {
                margin: 0 10px;
                padding: 10px 20px;
                font-size: 16px;
                background-color: #4CAF50;
                color: white;
                border: none;
                cursor: pointer;
            }
        </style>
    </head>
    <body>
    <div class="navigation">
    """

    # Создаем кнопки для каждой категории
    for category in all_data["menuCategories"]:
        html += f'<button onclick="showCategory(\'{category["id"]}\')">{category["name"]}</button>'

    html += """
    </div>
    """

    # Создаем контейнер для категорий
    html += """
    <div id="menuContent">
    """

    categories = defaultdict(list)

    # Группируем товары по категориям
    for item_data in all_data["items"]:
        target_id = item_data.get("id")
        extracted_data = extract_data_by_id(all_data, target_id)
        for product in extracted_data["products"]:
            categories[product["category"]].append(product)

    # Выводим категории и товары
    for category_id, products in categories.items():
        html += f"""
        <div class="category" id="{category_id}">
            <ul>
        """

        for product in products:
            html += f"""
                <li class="product">
                    <h3>{product["name"]}</h3>
                    <img src="{product["images"][0]["url"]}" alt="{product["name"]}">
                    <p>{product["description"]}</p>
                    <ul>
            """

            # Выводим размеры и цены
            if "size" in product:  # Проверяем наличие размера
                html += f"""
                    <li>{product["size"]} - {product["price"]}</li>
                """

            html += f"""
                    </ul>
                </li>
            """

        html += f"""
            </ul>
        </div>
        """

    html += """
    </div>
    <script>
        function showCategory(categoryId) {
            var categories = document.getElementsByClassName("category");
            for (var i = 0; i < categories.length; i++) {
                categories[i].style.display = "none";
            }
            document.getElementById(categoryId).style.display = "block";
        }
    </script>
    </body>
    </html>
    """

    return html


def main():
    with open('dodo.txt', 'r', encoding='utf-8') as f:
        data = json.load(f)

    # Сначала извлекаем все данные
    all_data = {
        "items": data.get("items", []),
        "products": data.get("products", []),
        "productSchemes": data.get("productSchemes", {}),
        "menuCategories": data.get("menuCategories", [])
    }

    html = generate_html(all_data)

    with open('menu.html', 'w', encoding='utf-8') as f:
        f.write(html)


if __name__ == "__main__":
    main()