Как удалить ключ из словаря, используя только значение, введенное пользователем - PullRequest
1 голос
/ 11 марта 2020

Я студент, пытающийся выполнить задачу в онлайн-курсе, и я не могу найти эффективный способ решения этой проблемы.

задача: Попросить пользователя ввести 4 их любимых продуктов и сохраните их в словаре так, чтобы они были проиндексированы с номерами, начинающимися с 1. Отобразите словарь полностью, показывая номер индекса и элемент. Спросите их, от чего они хотят избавиться, и удалите его из списка. Сортируйте оставшиеся данные и отобразите их.

Я испробовал множество возможных решений, но ни одно из них, похоже, не работает. Это то, что я сделал до сих пор (python 3.8):

foodcount=0
foods={1:0 ,2:0 ,3:0 ,4: 0}
while foodcount<4:
    food_choice=str(input('enter one of your favourite foods'))
    foodcount += 1
    foods[foodcount] = food_choice

least_fav=str(input('choos a food to delete'))
nowant=foods.index[least_fav]
del foods[nowant]
print(foods)

foods.sort(key=str)
for key,value in foods:
    print(foods(key,value))

Я не уверен, что неправильно понимаю этот вопрос, но главная проблема, с которой я сталкиваюсь, - это когда пользователь вводит еду, которую он люблю удалять (предположим, что всегда вводится входные данные, которые есть в dict) Я не могу удалить ключ, в котором находится продукт (не могу удалить ключ и значение). Я знаю, что должен что-то индексировать, но все еще не уверен

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

dict не поддерживает .index, поэтому вам придется использовать a для l oop для перебора словаря.

foodcount=0
foods={1:0 ,2:0 ,3:0 ,4: 0}
while foodcount<4:
    food_choice=str(input('enter one of your favourite foods'))
    foodcount += 1
    foods[foodcount] = food_choice

least_fav=str(input('choose a food to delete'))
for key, value in foods.items():
    if value == least_fav:
        foods.pop(key)
        break
print(foods)

for key,value in foods.items():
    print(key,value)

вы уже показали, что знаете, как использовать a для l oop до l oop через словарь, но вы должны немного его изменить. Если вы используете «food» в a для l oop, он будет перебирать только ключи, поэтому 1, 2, 3, 4. Если вы используете «foods.items ()», он устанавливает ключ для ключей и значение для значения, которые, я полагаю, вы хотели.

Далее вы просто скажете ему, что если значение ключа совпадает с тем, которое ввел пользователь, вы используете .pop, который удаляет пару ключ: значение на основе значения.

, кроме что вы просто убедитесь, что сломали, когда закончите, чтобы не получить ошибку и использовать свою (исправленную) печать l oop внизу, чтобы получить ключи и значения. Надеюсь, это поможет!

0 голосов
/ 11 марта 2020

Если в вашем словаре есть продукты в качестве ключей, с ними легче работать. Это будет работать, даже если они неправильно напишут имя (ничего не произойдет, если они напишут его неправильно):

foodcount=0
foods = []
while foodcount<4:
    food_choice=str(input('enter one of your favourite foods'))
    foodcount += 1
    foods.append(food_choice)

foods_dict = dict(zip(foods,[1,2,3,4]))
least_fav=str(input('choos a food to delete'))
foods_dict.pop(least_fav, None)

Вывод:

Еда: a, b, c, d

Наименее любимый: b

print(foods_dict)
{'a': 1, 'c': 3, 'd': 4}
...