检查列表中的值是否与字典中的特定值列表相同的函数?
Function that checks if values in a list are the same as specific value lists in a dictionary?
我想制作一个将字符串列表和字典作为输入的函数。如果列表中的任何字符串与字典中的一组值匹配,它们应该 return 一个与这些值对应的键。
示例输入类似于 available_dishes(ingredients, recipes)
。其中
ingredients = ['Fish','Rice','Eggs','Ketchup']
recipes = {'Sushi':['Fish','Rice','Seaweed'],'Grilled_Fish':['Fish'],'Omurice':['Eggs','Rice','Ketchup']}
因为列表中只有烤鱼和蛋包饭的必要成分,这将 return 输出:['Grilled_Fish','Omurice']
。具体来说,结果应按照键在字典中出现的顺序出现。
我在尝试什么
在我的尝试中,我分离了字典值列表中的一个列表。我试着专注于一个列表,这样我就可以了解其余列表的功能。我所做的不一定是一个函数,而是一组我想尝试解释的变量。
recipe_ingredients = list(recipes.values())
for i in ingredients:
if i in recipe_ingredients[0]:
print(i)
不幸的是,目前我对 python 的了解有限,因此这只是 return 两个列表之间的匹配成分:Fish Rice
。 我对 for 循环还不太熟悉,所以我想看看如何使用它们以及 if 语句来完成此操作。 如果可能的话,这个可以吗在不使用列表理解的情况下完成?
您可以使用all()
检查食谱是否有所有种可用成分:
ingredients = ["Fish", "Rice", "Eggs", "Ketchup"]
recipes = {
"Sushi": ["Fish", "Rice", "Seaweed"],
"Grilled_Fish": ["Fish"],
"Omurice": ["Eggs", "Rice", "Ketchup"],
}
out = [k for k, v in recipes.items() if all(i in ingredients for i in v)]
print(out)
打印:
['Grilled_Fish','Omurice']
没有list-comprehension:
out = []
for k, v in recipes.items():
if all(i in ingredients for i in v):
out.append(k)
print(out)
集是你的朋友。它们是独特项目的无序集合,例如食谱的成分。首先我把你的列表变成了集合:
my_ingredients = {'Fish', 'Rice', 'Eggs', 'Ketchup'}
recipes = {'Sushi': {'Fish', 'Rice', 'Seaweed'},'Grilled_Fish': {'Fish'}, 'Omurice': {'Eggs', 'Rice', 'Ketchup'}}
然后您可以检查食谱的成分是否是您的成分的一部分。下面是如何在列表理解中使用该条件:
>>> [food for food, ingredients in recipes.items() if ingredients.issubset(my_ingredients)]
['Grilled_Fish', 'Omurice']
我想制作一个将字符串列表和字典作为输入的函数。如果列表中的任何字符串与字典中的一组值匹配,它们应该 return 一个与这些值对应的键。
示例输入类似于 available_dishes(ingredients, recipes)
。其中
ingredients = ['Fish','Rice','Eggs','Ketchup']
recipes = {'Sushi':['Fish','Rice','Seaweed'],'Grilled_Fish':['Fish'],'Omurice':['Eggs','Rice','Ketchup']}
因为列表中只有烤鱼和蛋包饭的必要成分,这将 return 输出:['Grilled_Fish','Omurice']
。具体来说,结果应按照键在字典中出现的顺序出现。
我在尝试什么
在我的尝试中,我分离了字典值列表中的一个列表。我试着专注于一个列表,这样我就可以了解其余列表的功能。我所做的不一定是一个函数,而是一组我想尝试解释的变量。
recipe_ingredients = list(recipes.values())
for i in ingredients:
if i in recipe_ingredients[0]:
print(i)
不幸的是,目前我对 python 的了解有限,因此这只是 return 两个列表之间的匹配成分:Fish Rice
。 我对 for 循环还不太熟悉,所以我想看看如何使用它们以及 if 语句来完成此操作。 如果可能的话,这个可以吗在不使用列表理解的情况下完成?
您可以使用all()
检查食谱是否有所有种可用成分:
ingredients = ["Fish", "Rice", "Eggs", "Ketchup"]
recipes = {
"Sushi": ["Fish", "Rice", "Seaweed"],
"Grilled_Fish": ["Fish"],
"Omurice": ["Eggs", "Rice", "Ketchup"],
}
out = [k for k, v in recipes.items() if all(i in ingredients for i in v)]
print(out)
打印:
['Grilled_Fish','Omurice']
没有list-comprehension:
out = []
for k, v in recipes.items():
if all(i in ingredients for i in v):
out.append(k)
print(out)
集是你的朋友。它们是独特项目的无序集合,例如食谱的成分。首先我把你的列表变成了集合:
my_ingredients = {'Fish', 'Rice', 'Eggs', 'Ketchup'}
recipes = {'Sushi': {'Fish', 'Rice', 'Seaweed'},'Grilled_Fish': {'Fish'}, 'Omurice': {'Eggs', 'Rice', 'Ketchup'}}
然后您可以检查食谱的成分是否是您的成分的一部分。下面是如何在列表理解中使用该条件:
>>> [food for food, ingredients in recipes.items() if ingredients.issubset(my_ingredients)]
['Grilled_Fish', 'Omurice']