Добавление и удаление ключей из словаря
Всем добрый вечер!
Есть словарь:
fruits = {
'apple': ['15'],
'orange': ['25'],
'melon': []}
После ввода пользователем определённых команд (add и del) нужно добавить новый введённый юзером ключ (предположим, 'pineapple') и удалить существующий (только если директория пустая, как в случае с 'melon'). В результате, и там, и там нужно вывести обновлённый список ключей (без значений).
В теории я знаю, как добавлять и удалять ключи в словаре, используя команды .update и .pop. Но я не могу сообразить, как добавить/удалить ключ, введённый непосредственно пользователем по команде.
Заранее спасибо за подсказки!
Ответы (5 шт):
Вы это имеете ввиду?
b = {'a':1,
'b':2,
'c':3}
zet = input("New key: ")
b.update({zet:[]})
b.pop(zet)
Всё вышло, всё работает:
fruits = {
'apple': ['15'],
'orange': ['25'],
'melon': []}
p = input('Введите команду')
if p == 'add':
fruit = input('Введите новый фрукт: ')
fruits[fruit]=[]
print(', '.join(fruits.keys()))
if p == 'del':
fruit = input('Введите ненужный фрукт: ')
del(fruits[fruit])
print(', '.join(fruits.keys()))
Но есть парочка дополнительных условий, с которыми тоже нужна помощь:
Если фрукт уже существует (при добавлении) или его нет в списке (при удалении), нужно вывести соответствующую команду.
Если у ключа есть значение, удалять его нельзя. То есть удалить можно только ключ с пустым списком значений.
Не понимаю, какие if в данных случаях задавать. И можно ли создать общую функцию , чтобы не раздувать код?
Итак, я всё ещё мучаюсь со своими фруктами. Вот, что есть:
fruits = {
'apple': ['15'],
'orange': ['25'],
'melon': []}
def add_fruit(name):
fruits[name] = []
if name != fruits.keys():
print('Фрукт добавлен. Текущий список: ', ', '.join(fruits.keys()))
else:
print('Такой фрукт уже существует')
def rem_fruit(name):
fruits[name] = []
if len(fruits[name]) == 0:
del(fruits[name])
print('Фрукт удалён. Текущий список: ',', '.join(fruits.keys()))
else:
print('На складе ещё есть фрукты')
p = input('Введите команду: ')
if p == 'as':
print(add_fruit(input('Введите фрукт: ')))
if p == 'ds':
print(rem_fruit(input('Введите фрукт: ')))
Проблемы:
У меня выполняется только условие по if. Почему else не срабатывает?
Куда вставлять return?
Есть ли вариант ещё больше сократить код?
Вот такой код должен работать:
fruits = { 'apple': ['15'], 'orange': ['25'], 'melon': []}
def menu(p):
if p == 'as':
return add_fruit(input('Введите фрукт: '))
elif p == 'ds':
return rem_fruit(input('Введите фрукт: '))
elif p == 's':
return get_fruit(input('Введите номер фрукта: '))
def add_fruit(name):
if name in fruits:
return 'Такой фрукт уже существует'
fruits[name] = []
return 'Фрукт добавлен. Текущий список: ' + ', '.join(fruits.keys())
def rem_fruit(name):
if name in fruits:
if fruits[name]:
return 'На складе ещё есть фрукты'
del fruits[name]
return 'Фрукт удалён. Текущий список: ' + ', '.join(fruits.keys())
return 'Такого фрукта нет на складе'
def get_fruit(number):
res = list(filter(lambda e: number in e[1], fruits.items()))
return res[0] if res else 'Такой фрукт не существует'
p = input('Введите команду: ')
print(menu(p))
Итак, есть всё тот же словарь:
fruits = {
'apple': ['15'],
'orange': ['25'],
'melon': []}
Есть функция, которая позволяет найти фрукт по его номеру:
def get_fruit(number):
return list(filter(lambda e: number in e[1], fruits.items()))[0]
Используем мы её вот так:
p = input('Введите команду: ')
if p == 's':
print(get_fruit(input('Введите номер фрукта: '))[0])
Но есть условие. Если пользователь вводит значение, которого не существует в словаре (к примеру, 33), вместо ошибки должно появиться сообщение "Такого фрукта не существует". Как ввести данное условие в функцию?