如何对dict中的值求和?Python,烧瓶



我在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)

最新更新