gpt4 book ai didi

python在迭代时修改dict删除

转载 作者:行者123 更新时间:2023-11-30 22:32:49 24 4
gpt4 key购买 nike

remove_item 方法需要与 add_item 类似的参数。它应该删除已添加到购物车且不需要的商品。此方法应从当前总计中扣除这些项目的成本,并相应地更新项目字典。如果要删除的商品数量超过购物车中的当前数量,则假定该商品的所有条目都将被删除。

class ShoppingCart(object):
#constructor
def __init__(self):
self.total = 0
self.items = {}

#method to add items in the shoping cart
def add_item(self,item_name, quantity, price):
self.total += (price * quantity )
self.items[item_name] = quantity

#method to remove items
def remove_item(self,item_name, quantity, price):
keys = self.items.keys()
for keys,v in self.items.items():
if keys == item_name and quantity > self.items[keys]: #if item_name equals iterated item
self.total -= (price * quantity )
del( self.items[keys] )
del(self.items[keys])
self.total -= (quantity * price)

还有测试单元可供检查

def test_add_item_hidden(self):
self.cart.add_item('Mango', 3, 10)
self.cart.add_item('Orange', 16, 10)
self.assertEqual(self.cart.total, 190, msg='Cart total not correct after adding items')
self.assertEqual(self.cart.items['Orange'], 16, msg='Quantity of items not correct after adding item')

方法remove_item给出了一个错误,即字典在迭代期间改变了大小,即使在尝试通过keys访问之后,如上所示

最佳答案

我认为remove_item函数可以更简单。

#method to remove items
def remove_item(self,item_name, quantity, price):
if item_name in self.item.keys():
self.total -= (price * quantity)
del self.items[item_name]

在此版本中,您将检查 item_name 是否在字典中,如果是,则将其删除,并从 total 中删除价格

在迭代字典、列表、类型时尝试从它们中删除通常不是一个好主意。

如果 item_name 是一个键列表,我必须假设数量和价格也是。所以一个可能的功能可能是:

def remove_item(self,item_name, quantity, price):
for index, value in enumerate(item_name):
if value in self.item.keys():
self.total -= (price[index] * quantity[index])
del self.items[value]

我还没有测试过,但应该可以。

<小时/>

如果想法是获取元素 list 。该函数应该是这样的。

#method to remove items
def remove_item(self,item_name, quantity, price):
if item_name in self.items.keys():
#remove from total the price for the items
if quantity <= self.items[item_name]:
self.total -= (price * quantity)
else:
self.total -= (price * self.items[item_name])
#if quantity is greater or equal of the current value, item is removed.
if quantity >= self.items[item_name]
del self.items[item_name]
else:
self.items[item_name] -= quantity

关于python在迭代时修改dict删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45338124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com