#loops #dictionary
Вопрос:
Я пытаюсь вернуть список рецептов (ключей), которые соответствуют определенному входному значению в Python 3.7, используя Spyder. Я могу получить первое значение из словаря, но я не могу добавить больше в список.
recipes = {'Fixate Pasta E Fagioli' : '1G1Y1t' , 'Fixate Vegan Quinoa with Winter Veggies' :
'1G1Y1t' , 'Fixate Balsamic Mushroom Toast' : '1G1Y1t' }
matching_recipes = []
def get_recipe(cont):
for recipe, containers in recipes.items():
if cont == containers:
matching_recipes.append(recipe)
return matching_recipes
return 'no matching recipe'
print(get_recipe('1G1Y1t'))
Я получаю: [«Зациклитесь на пасте И Фаджоли»]
Почему он не повторит и не добавит другие рецепты в список? Я явно новичок в Python, поэтому, возможно, я не понимаю, почему он не будет продолжать повторяться и добавляться.
Ответ №1:
- вы возвращаете
matching_recipes
немедленно, когдаcont==containers
,так что это разорвет цикл.Я меняю положение возврата - это
matching_recipes
должна быть функциональная переменная,а не глобальная переменная
recipes = {'Fixate Pasta E Fagioli' : '1G1Y1t' , 'Fixate Vegan Quinoa with Winter Veggies' :
'1G1Y1t' , 'Fixate Balsamic Mushroom Toast' : '1G1Y1t' }
def get_recipe(cont):
matching_recipes = []
for recipe, containers in recipes.items():
if cont == containers:
matching_recipes.append(recipe)
if len(matching_recipes)>0:
return matching_recipes
else:
return 'no matching recipe'
print(get_recipe('1G1Y1t'))
Комментарии:
1. Спасибо вам за объяснение. Код работал идеально.
2. Я очень рад, что помог вам.не могли бы вы отметить ответ как правильный
Ответ №2:
- Причина «Почему он не повторит и не добавит другие рецепты в список?» вы можете увидеть ответ @nay.
- Есть простой способ
list comprehension
сделать это.
код:
recipes = {'Fixate Pasta E Fagioli' : '1G1Y1t' , 'Fixate Vegan Quinoa with Winter Veggies' :
'1G1Y1t' , 'Fixate Balsamic Mushroom Toast' : '1G1Y1t',"test":"123","foo":"bar","hello":"bar" }
def get_recipe(value):
return [k for k,v in recipes.items() if v == value]
print(get_recipe('1G1Y1t'))
print(get_recipe('bar'))
print(get_recipe('foo'))
Результат:
['Fixate Pasta E Fagioli', 'Fixate Vegan Quinoa with Winter Veggies', 'Fixate Balsamic Mushroom Toast']
['foo', 'hello']
[]
Комментарии:
1. Спасибо вам за код, который сработал. Я ищу ответ «нет подходящего рецепта», когда что-то не совпадает. Мне нравится простота кода.