Python:如何在字典中将一个值添加到现有值?

4

Python 3.6

您好,我正在为学校编写库存管理程序,但是我无法弄清如何在字典中将1添加到现有数字。因此,我将物品的数量存储在字典中,但不知道如何让Python将1添加到数量数字中。代码如下所示:

stock = {'Intel i7-7770T' : ['Intel i7-7770T', '$310', 'New','1101'],
         'Intel i7-7770T QUAN' : [3]}

我需要定义一个函数吗?如果我卖出一台Intel i7-7770T,那么"Intel i7-7770T QUAN"应该变成2。或者如果我有更多的库存,它应该变成4。我该如何实现这个功能?任何帮助都将不胜感激。谢谢!

此外,添加是通过使用Tkinter按钮完成的,我已经弄清楚了。所以如果通过一个函数来完成这个任务,我只需要将按钮链接到函数即可。


2
为什么要将值存储在“列表”中?如果它只是一个整数,那就更容易了。无论如何:stock['Intel i7-7770T QUAN'][0] -= 1 - Ma0
1
在你开始操作字典之前,也许应该重新考虑一下字典的结构?看起来你可以通过对键/值对进行一些规划,使自己的生活变得更加轻松。 - RHSmith159
4个回答

2

试试这个:

stock['Intel i7-7770T QUAN'][0] += 1

2
我会重新格式化整个字典:
stock = {
    'Intel i7-7770T': {
        'price_USD': 310,
        'condition': 'New',
        'whatever': '1101',   # should this really be a string, or is it always a number?
        'quantity': 3
    },
    ...
}

然后你可以执行以下操作:stock['Intel i7-7770T']['quantity'] += 1

其他操作也应该更容易了。 20%的折扣:

stock['Intel i7-7770T']['price_USD'] *= 0.8

从库存中删除整个商品:
stock.pop('Intel i7-7770T')

1
在当前的字典结构中,比@Danil Speransky更通用的方法是:
def sold(name, quant):
    stock[name + " QUAN"][0] -= quant

我会重构字典,并考虑定义一个类来创建字典中的对象:

class store_item(object):
    def __init__(self, price, condition, quantity, info1=None, info2=None):
        self.price_usd = price
        self.condition = condition
        self.info1 = info1
        self.info2 = info2
        self.quant = quantity

然后,您可以使用对象创建一个字典,并以更好的方式进行访问(甚至可以使用继承来创建不同种类产品的特殊类,例如处理器)。访问示例:
stock['Intel i7-7770T'].quant -= 1
stock['Intel i7-7770T'].price_usd *= 0.95

使用类的优点是,您可以在对象中编写额外的初始化,并创建方法来执行某些操作。例如,折扣可以以保留旧值的不同方式完成:

class store_item(object):
    def __init__(self, price, condition, quantity, discount=None, info1=None, info2=None):
        self.price_usd = price
        self.discount = discount
        self.condition = condition
        self.info1 = info1
        self.info2 = info2
        self.quant = quantity

   def get_price(self, unit):
       if self.discount is None:
           return getattr(self, "price_" + unit)
       else:
           return getattr(self, "price_" + unit) * (1 - self.discount)

0

不需要列表,只需将数量存储为简单值,然后使用该值。你的JSON应该是这样的:

stock = {'Intel i7-7770T' : ['Intel i7-7770T', '$310', 'New','1101'],
     'Intel i7-7770T QUAN' : 3}

你可以使用 stock['Intel i7-7770T QUAN'] 来访问该数量。

使用前两个评论中提供的代码来增加/减少数量,不需要 [0]。

我建议改变字典的结构,并为型号、价格等使用一个字典。这样,更容易和可靠地引用这些属性,而无需依赖列表并通过它们的索引获取。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接