Возврат всех ключей, имеющих одинаковое значение в словаре на python

#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. Спасибо вам за код, который сработал. Я ищу ответ «нет подходящего рецепта», когда что-то не совпадает. Мне нравится простота кода.