Этого кода достаточно для ваших требований:
for category, food in shopDict.items():
if userQuery in food:
basketDict[category] = {userQuery: food[userQuery]}
Но если вы хотите добавить новые товары в корзину, вы должны обновить его правильно:
for category, food in shopDict.items():
if userQuery in food:
basketDict.update(
{category: {**basketDict.get(category, {}),
**{userQuery: food[userQuery]}}}
)
Вы хотитеобъединить фактический словарь категории (фактическое содержимое корзины) с ключом-значением выбранного элемента.Обычно в python3, если у вас есть 2 словаря, это способ объединить их в один:
d1 = {"one": 1, "two": 2}
d2 = {"three": 3}
merged = {**d1, **d2} # {'one': 1, 'two': 2, 'three': 3}
Поскольку **
используется для распаковки словаря.
Хороший способ понять этоесли у вас есть определение функции с некоторыми аргументами, то вы можете вызвать функцию со словарем, имена аргументов которого являются ключами.Но вы должны распаковать его, в противном случае вы передадите словарь в качестве параметра, а не его значения.
d = {"one": 1, "two": 2}
def example(one, two):
pass
example(d)
выдаст ошибку типа TypeError, поскольку отсутствует второй позиционный аргумент, но example(**d)
будет работать нормально