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, и я понял это. Так что, если это делается с помощью функции, я бы просто связал кнопку с функцией.
4 ответа
В более обобщенном методе, чем @Danil Speransky с вашей текущей структурой dict:
def sold(name, quant):
stock[name + " QUAN"][0] -= 1
Я бы также реструктурировал диктат и даже рассмотрел определение класса для создания объектов в диктанте:
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)
Нет необходимости в списке. Просто сохраните количество как простое значение. И просто используйте значение. Ваш JSON будет выглядеть так:
stock = {'Intel i7-7770T' : ['Intel i7-7770T', '$310', 'New','1101'],
'Intel i7-7770T QUAN' : 3}
И вы можете получить доступ к этому количеству с stock['Intel i7-7770T QUAN']
Используйте код, указанный в первых двух комментариях, чтобы удалить / увеличить количество без [0].
И я бы порекомендовал изменить структуру диктата и использовать диктат для модели, цены и т. Д. Таким образом, проще и надежнее ссылаться на эти атрибуты по их ключу, чем полагаться на список и получать их по индексу.
Я бы переформатировал весь дикт
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')
Попробуй это:
stock['Intel i7-7770T QUAN'][0] += 1
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.