如何检查嵌套在循环中的字典中是否存在值

时间:2019-08-03 17:51:40

标签: python list dictionary flask

如果项目名称已经在嵌套在列表中的字典中,则我尝试增加数量值,我计划使用的方法是通过检查字典中是否不存在项目名称,然后将其添加到列表中,否则,如果字典中确实存在它,则将数量增加一。

我不太确定如何查看项目名称是否在嵌套字典中,即环顾四周但没有发现任何东西

@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)

4 个答案:

答案 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)

只是一种解决问题的方法。