首页 > 解决方案 > 嵌套字典 python 中的购物车总价

问题描述

我想用下面的代码计算我的购物车中的总价格,但我无法遍历我的 items dict 中的价格。那里缺少一些东西。此外,如果可以修复 for 循环,有没有办法使用理解进行迭代?

class ShoppingCart(object):
    def __init__(self):
        self.item = None
        self.quantity = None
        self.price = None
        self.items = {}
    def add(self, item, price, quantity):

        if item in self.items:
            previous_quantity = self.items[item]['quantity']
            previous_price = self.items[item]['price']

            self.items[item] = {'quantity': previous_quantity +   quantity,
                                'price': previous_price + price}
        else:
            self.items[item] = {'quantity':quantity,
                           'price':price}

    def total_items_in_cart(self):
         print(len(self.items))

    def total_items_price_in_cart(self):
         print(sum([price
                 for price in self.items.values()]))

sc = ShoppingCart()
sc.add('book', 30, 1)
# sc.add('book', 132, 1)

sc.add('toothbrush', 4, 10)
# sc.add('toothbrush', 5, 20)

# sc.total_items_in_cart()

cart_price_total = []
for item, value in sc.items.items():
    print("\n{}".format(item))
    for price,qty in value.items():
        print("{} :{}".format(price, qty))
        cart_price_total.append(qty)

print(cart_price_total) # this does not print what I want... 

有没有办法使用理解来获取我的购物车中的总价值?

编辑:

I added the data using a tuple, and it seems simple now. Cannot figure out why...

class ShoppingCart(object):
    def __init__(self):
        self.item = None
        self.quantity = None
        self.price = None
        self.items = {}
    def add(self, item, price, quantity):
        if item in self.items:
            previous_quantity = self.items[item]['quantity']
            previous_price = self.items[item]['price']
            self.items[item] = (previous_quantity+quantity, previous_price+price)
        else:
            self.items[item] = (price, quantity)

    def total_items_in_cart(self):
         return(len(self.items))

    def total_items_price_in_cart(self):
         return(sum([price
                 for price, quantity in self.items.values()]))

sc = ShoppingCart()
sc.add('book', 30, 1)
sc.add('toothbrush', 4, 10)
print(sc.total_items_in_cart())
print(sc.total_items_price_in_cart())

标签: pythonpython-3.x

解决方案


将您的功能更改total_items_price_in_cart为:

def total_items_price_in_cart(self):
    items_prices = {k: v['price'] * v['quantity'] for (k, v) in self.items.items()}
    # items_prices == {'book': 30, 'toothbrush': 40}
    return sum(items_prices.values())

输出有问题的输入数据:

70


推荐阅读