Проверить на дубль объект в массиве, перед добавлением на Python

Всем привет ребятки. Мне по сути нужно реализовать простую корзину. Есть массив с объектами:

   {
    "basket": [
        {
            "product": "Товар 1",
            "product_id": "1",
            "quantity": 2
        },
        {
            "product": "Товар 2",
            "product_id": "2",
            "quantity": 1
        }
    ]
}

Перед добавлением в этот массив, мне нужно проверить объект, есть ли такой, полагаю по идентификатору можно, и если есть то добавить количество

Пробовал, просто pop() делать из списка, проверять и возвращать обратно, но почему то очень некорректно работает. Может есть явный какой то алгоритм.


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

Автор решения: Liquid

Вам требуется добавить количество товара при его повторном выборе или же вообще не добавлять его в корзину?

Метод pop() точно не нужен. Он используется для удаления элементов массива. Вероятно вы, "вытаскивая" элемент из массива методом pop() "нарушили" его структуру, т.е. вернуть её уже не получится, из-за того, что метод pop() удаляет элемент,а затем смещает все последующие на 1 "влево".

Обычным перебором for product in basket проверяете, есть ли такой товар. Если есть найдите индекс этого элемента массива (функция index) В 1 случае basket["basket"][index]["quantity"] += 1. Во 2 просто предупредите пользователя о том, что товар уже в корзине и не добавляйте туда ничего.

→ Ссылка
Автор решения: Kirill Vercetti

Превратите корзину в словарь, в качестве ключа будет уникальный идентификатор продукта

{
    "basket": {
        "1" : {
            "product": "Товар 1",
            "product_id": "1",
            "quantity": 2
        },
        "2": {
            "product": "Товар 2",
            "product_id": "2",
            "quantity": 1
        }
    }
}

Затем наличие можно проверить как "2" in basket, это будет работать со сложностью O(1), в отличии от перебора списка, как предложили выше, где сложность будет O(n)

→ Ссылка