@Makdim007

Как изменить значение ключа?

Всем привет! Нужна помощь с написанием функции повышения цен на товары Повысить цены нужно на 12. Вот мой код:
shop = {'Молочное':{'молоко': 100, 'кефир': 60, 'йогурт':40},
'Овощи':{'картошка':50, "морковь":55, 'свекла':65}}
def update_prices(val, shop = shop):
for product, price in shop.items():
new_price = price + val
shop.update({product:{price:new_price}})
return shop
update_prices(12)

В итоге получил такую ошибку: unsupported operand type(s) for +: 'dict' and 'int'
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Wispik
Написано же, нельзя складывать словарь и int.
(не проверял, но вроде так нужно)
def update(val, shop):
	for type_product, products in shop.items():
		for product, price in products.items():
			shop[type_product][product] = price + val
Ответ написан
ZIK1337
@ZIK1337
Помимо текста ошибки указывается и строчка кода с ней
И что тогда непонятного в том, что нельзя складывать словарь и целое число?
Ответ написан
@o5a
Если это не одноразовая задача, можно написать какую-нибудь универсальную функцию обновления таких цен независимо от формата словаря, просто пробегать и изменять все цифровые значения в цикле, например так

from operator import add, mul

# val - изменяющее значение, oper - выбор операции добавления или умножения
def update_prices(shop, val=1, oper=add):
    for k, v in shop.items():
        if type(v) in (int, float):
            shop[k] = oper(v, val)
        else:
            update_prices(v, val, oper)

shop = {'Молочное':{'молоко': 100, 'кефир': 60, 'йогурт':40},'Овощи':{'картошка':50, "морковь":55, 'свекла':65}}

update_prices(shop)
# {'Молочное': {'молоко': 101, 'кефир': 61, 'йогурт': 41}, 'Овощи': {'картошка': 51, 'морковь': 56, 'свекла': 66}}

update_prices(shop, 10)
# {'Молочное': {'молоко': 111, 'кефир': 71, 'йогурт': 51}, 'Овощи': {'картошка': 61, 'морковь': 66, 'свекла': 76}}

update_prices(shop, 10, mul)
# {'Молочное': {'молоко': 1110, 'кефир': 710, 'йогурт': 510}, 'Овощи': {'картошка': 610, 'морковь': 660, 'свекла': 760}}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы