Проверить на дубль объект в массиве, перед добавлением на Python
Всем привет ребятки. Мне по сути нужно реализовать простую корзину. Есть массив с объектами:
{
"basket": [
{
"product": "Товар 1",
"product_id": "1",
"quantity": 2
},
{
"product": "Товар 2",
"product_id": "2",
"quantity": 1
}
]
}
Перед добавлением в этот массив, мне нужно проверить объект, есть ли такой, полагаю по идентификатору можно, и если есть то добавить количество
Пробовал, просто pop() делать из списка, проверять и возвращать обратно, но почему то очень некорректно работает. Может есть явный какой то алгоритм.
Ответы (2 шт):
Вам требуется добавить количество товара при его повторном выборе или же вообще не добавлять его в корзину?
Метод pop() точно не нужен. Он используется для удаления элементов массива. Вероятно вы, "вытаскивая" элемент из массива методом pop() "нарушили" его структуру, т.е. вернуть её уже не получится, из-за того, что метод pop() удаляет элемент,а затем смещает все последующие на 1 "влево".
Обычным перебором for product in basket проверяете, есть ли такой товар. Если есть найдите индекс этого элемента массива (функция index) В 1 случае basket["basket"][index]["quantity"] += 1. Во 2 просто предупредите пользователя о том, что товар уже в корзине и не добавляйте туда ничего.
Превратите корзину в словарь, в качестве ключа будет уникальный идентификатор продукта
{
"basket": {
"1" : {
"product": "Товар 1",
"product_id": "1",
"quantity": 2
},
"2": {
"product": "Товар 2",
"product_id": "2",
"quantity": 1
}
}
}
Затем наличие можно проверить как "2" in basket, это будет работать со сложностью O(1), в отличии от перебора списка, как предложили выше, где сложность будет O(n)