如何计算dict中的值之和?Python,Flask

2024-05-10 07:28:35 发布

您现在位置: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*'}

Tags: nameinformflaskimgforobjectrequest
3条回答

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

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”)转换为类型float。使用它的方式如下:

>>> get_cart_total(product_cart)
1000.0

要获得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

使用第一个for循环访问字典,但问题是,使用第二个for循环访问字典中的键,而不是值。 因此,只需这样做:

for products in cart_products:
    print(products['product_cost'])

相关问题 更多 >