如果项目名称已经在嵌套在列表中的字典中,则我尝试增加数量值,我计划使用的方法是通过检查字典中是否不存在项目名称,然后将其添加到列表中,否则,如果字典中确实存在它,则将数量增加一。
我不太确定如何查看项目名称是否在嵌套字典中,即环顾四周但没有发现任何东西
@app.route("/AddToCart", methods=["POST", "GET"])
def addToCart():
itemId = int(request.form.get("productId"))
MenuItem = Menu.query.get(itemId)
if MenuItem is None:
return render_template("error.html", errorMessage="There has been an issue adding this item to your basket")
sVars = session['cart']
if(MenuItem.ItemName not in sVars):
sVars.append({'Itemname': MenuItem.ItemName, 'Itemprice': float(MenuItem.ItemPrice), 'Qty': 0})
else:
sVars['Qty'] += 1
session['cart'] = sVars
allPrices = Money(amount=sum([x['Itemprice'] for x in sVars]), currency='GBP')
return render_template("cart.html", cartSession=session['cart'],allPrices=allPrices)
答案 0 :(得分:0)
嗨,这对我有用
def check_exist(my_dict, key):
if key in my_dict.keys():
return True
return False
答案 1 :(得分:0)
一种简单的方法是替换这段代码:
df['g'] = df['g'].fillna(method='bfill')
df['l'] = df['l'].fillna(method='bfill')
具有:
sVars = session['cart']
if(MenuItem.ItemName not in sVars):
sVars.append({'Itemname': MenuItem.ItemName, 'Itemprice': float(MenuItem.ItemPrice), 'Qty': 0})
else:
sVars['Qty'] += 1
session['cart'] = sVars
allPrices = Money(amount=sum([x['Itemprice'] for x in sVars]), currency='GBP')
return render_template("cart.html", cartSession=session['cart'],allPrices=allPrices)
一些注意事项:首先,您的原始代码尝试将 cart = session['cart']
for item in cart:
if item['Itemname'] == MenuItem.ItemName:
item['Qty'] += 1
break
else:
cart.append({
'Itemname': MenuItem.ItemName,
'Itemprice': float(MenuItem.ItemPrice),
'Qty': 1
})
totalPrice = Money(
amount=sum([item['Itemprice'] * item['Qty'] for item in cart]),
currency='GBP')
return render_template("cart.html", cartSession=cart, allPrices=totalPrice)
两者用作数组(带有sVars
)和字典(带有.append()
) 。当然,它必须是一个。我假设它是一个数组,但是如果该假设是错误的,请更正我(并显示它的示例)。
第二,我建议的代码使用许多人都不熟悉的Python功能,即带有sVars['Qty']
循环的else
块。如果您以前从未看到过此功能,那么它就是专门为这种用途而设计的。它的工作方式是,如果使用for
语句显式退出了循环,则不会执行break
块。如果循环运行完成,则执行else
块 。
最后,我假设else
应该是购物车中所有物品的总价,因此,每个物品的价格应乘以其数量。
答案 2 :(得分:0)
假设您有一个这样的列表:
if (dt.Rows.Count >= 0){
int VisitNo = Convert.ToInt32(dt.Rows[0][0].ToString());
int ReVisitNo = VisitNo++;
ReVisitNo = Convert.ToInt32(tbRevisitID.Text);
}
然后您可以使用类似的功能来更新项目:
ls = [{"Itemname": "Test", "Itemprice": 1, "Qty": 0}, {"Itemname": "Test1", "Itemprice": 1, "Qty": 0}]
您遍历列表中的所有项目,如果存在同名项目,则增加数量并退出,否则您将其追加。
答案 3 :(得分:0)
sVars=[]
flag=0
indexgot=0
for i in sVars:
if(i['Itemname']=='item1'):
flag=1
indexgot=i
if(not flag):
sVars.append({'Itemname': "item1", 'Itemprice': float(50), 'Qty': 0})
else:
sVars[sVars.index(indexgot)]['Qty'] += 1
print(sVars)
只是一种解决问题的方法。