首页 > 解决方案 > 如何对dict中的值求和?蟒蛇,烧瓶

问题描述

我通过 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*'}

标签: pythondictionaryflask

解决方案


关于您的编辑,请注意这实际上是一本字典:

product_cart = {'product_name': 'product2', 'product_cost': '400', 'product_img': ''}

所以费用可以通过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' 这样的字符串值转换为 type float。像这样使用它:

>>> get_cart_total(product_cart)
1000.0

推荐阅读