我在Flask中创建了一个简单的购物车:
session['cart'] += [{
'product_name': request.form['product_name'],
'product_cost': request.form['product_cost'],
'product_img': request.form['product_img'],
}]
那么如何得到product_cost
中值的和呢?
我试着这样做,以获得product_cost
的值:
for products in cart_products:
for p in products:
print(p.product_cost)
但我得到一个错误:AttributeError: 'str' object has no attribute 'product_cost'
print(cart_products)
的输出,其中cart_products = session['cart']
:
{'product_name': 'product2', 'product_cost': '400', 'product_img': '*very long binary object*'}
关于您的编辑,请注意这实际上是一个字典:
product_cart = {'product_name': 'product2', 'product_cost': '400', 'product_img': ''}
所以cost可以通过product_cart['product_cost']
访问。
但是,我不确定您是否真的打算将其维护为字典列表(其中列表是购物车内容,每个字典是产品)。它看起来像:
product_cart = [{'product_name': 'product1', 'product_cost': '300', 'product_img': ''},
{'product_name': 'product2', 'product_cost': '400', 'product_img': ''},
{'product_name': 'product3', 'product_cost': '300', 'product_img': ''},
]
你可以这样做:
>>> for product in product_cart:
... print (product['product_cost'])
...
300
400
300
所以要得到所有值的一些,有一个函数:
def get_cart_total(cart):
return sum([float(product['product_cost']) for product in cart ])
注意,这会将字符串值(如'400')转换为类型float
。使用如下:
>>> get_cart_total(product_cart)
1000.0
使用第一个for循环,您正在访问字典,但问题是,您正在访问字典内的键,而不是使用第二个for循环的值。所以只要这样做:
for products in cart_products:
print(products['product_cost'])
要获得product_cost
的总和,您需要:
sum([int(x['product_cost']) for x in session['cart']])
的例子:
cart = [
{
'product_name': 'abc',
'product_cost': 12,
'product_img': 'abc.jpg',
},
{
'product_name': 'abc',
'product_cost': 13,
'product_img': 'abc.jpg',
},
{
'product_name': 'abc',
'product_cost': 14,
'product_img': 'abc.jpg',
},
]
total = sum([x['product_cost'] for x in cart])
print(total)
→
39
您可以尝试使用
some_var = session[‘cart’][0].values()
another_var = len(some_var)