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

时间:2021-01-30 14:41:14

标签: python dictionary flask

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

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分: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

答案 3 :(得分:0)

你可以尝试使用

some_var = session[‘cart’][0].values()
another_var = len(some_var)