我要声明一个名为 add_to_cart 的方法(db,itemid,数量)。每当调用该方法时,它将在数据库中查找会话数据。会话数据包含词典列表。此方法的目的是为列表创建一个新条目(字典)或更新现有条目的值。 字典具有以下键:id,数量
到目前为止,我已经开发了以下代码。首先,从数据库中获取数据后,我将itemid与字典键“ id”进行匹配。如果itemid与字典中的任何值都不匹配,则它将新字典添加到该列表中。
def add_to_cart(db, itemid, quantity):
# ......
row = cursor.fetchone()
if row is not None:
cart = json.loads(row['data'])
for dic in cart:
if str(dic.get("id")) == str(itemid):
dic['quantity'] = int(dic['quantity']) + quantity
data = json.dumps(cart)
# update the 'data' to the database
break
else:
if counter == len(cart):
item = {
'id': itemid,
'quantity': quantity
}
cart.append(item)
data = json.dumps(cart)
# update the 'data' to the database
break
让最初的购物车像:
[{'id':'40','quantity':'2'},{'id':'41','quantity':'5'}]
当我在购物车中再添加1件商品40时,应该是:
[{'id':'40','quantity':'3'},{'id':'41','quantity':'5'}]
但是我得到了:
[{'id':'40','quantity':'2'},{'id':'41','quantity':'5'},{'id':'40','数量”:“ 1”}]
答案 0 :(得分:1)
您进行cart.append(item)
时将新字典添加到列表中,
因此列表
[{'id': '40', 'quantity': '2'}, {'id': '41', 'quantity': '5'}]
最终成为
[{'id': '40', 'quantity': '2'}, {'id': '41', 'quantity': '5'}, {'id': '40', 'quantity': '1'}]
但是您想在该词典列表中找到匹配的ID,然后添加到该词典的数量中。
所以代码将如下所示:
li = [{'id': '40', 'quantity': '2'}, {'id': '41', 'quantity': '5'}]
def add_elem(li, id, to_add):
#Iterate over the dictionaries
for item in li:
#If the id is found
if str(id) in item.values():
#Increment the quantity
item['quantity'] = str(int(item['quantity']) + to_add)
#Return the updated list
return li
print(add_elem(li, 40, 1))
输出将为
[{'id': '40', 'quantity': '3'}, {'id': '41', 'quantity': '5'}]
答案 1 :(得分:0)
问题似乎在于,您将通过append
只是向列表(购物车)中添加一个新字典。您需要浏览列表,找到需要的itemid
字典,然后添加到quantity
。
尝试一下-
for dict in cart:
if dict[itemid] == itemid:
dict['quantity'] += str(quantity)
break
item = {
'id': itemid,
'quantity': quantity
}
cart.append(item)