python - 嵌套字典 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())
解决方案
将您的功能更改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
推荐阅读
- python - 如何在 Python 中录制音频而不提前给出持续时间
- scala - Clojure、Racket、Scala 和 Common Lisp 中 pexpect 的替代品有哪些?
- h2o - h2o.automl 中的 sort_metric 参数没有被使用
- visual-studio - 创建依赖于 NuGet 包的安装文件在 Microsoft Visual Studio 2017 安装程序项目中不起作用
- python - 如何将节俭结构传递给 Python 服务器
- php - 如何在 PHP 中使用 JSON 编码 mysqli 结果
- javascript - 使用多个数据源时 D3 函数不起作用
- javascript - 适用于所有图像格式的 Mime 类型
- c++ - C++、Visual Studio 2008、错误 C2556、C2371
- vb.net - vb.net - 如何从richtextbox中的每一行获取值并将每个值显示到文本框中