PYTHON:如果列表包含该键的所有值,如何 return 字典键
PYTHON: How to return a dictionary key if a list contains all values for that key
使用 python.
尝试制作一个食谱程序,告诉我可以根据当前的食材(清单)制作哪些餐点(关键)。
这是我的膳食字典,key是膳食,value是所需的食材:
breakfast = {
"cerealBowl" : ["milk", "cereal"],
"toast" : ["bread", "butter"],
"eggsBacon" : ["eggs", "bacon"],
"frenchToast" : ["bread", "eggs"]
}
这是我目前拥有的配料清单:
currentIngredients = ["milk", "bread", "rice", "butter", "eggs"]
如果所有值都在我当前的配料表中,我希望程序 return 我可以做的饭菜(关键)。
到目前为止我有:
def scanRecipes():
for item in currentIngredients:
我不确定如何设置我的 next for loop/if 语句来迭代我的早餐字典值并将成分与我的当前成分列表进行比较。
希望获得类似于以下内容的输出:
"Meals available to make..." "toast" with ["bread", "butter"],"frenchToast" with ["bread", "eggs"]
currentIngredients = set(["milk", "bread", "rice", "butter", "eggs"])
for key,ing in breakfast.items():
if currentIngredients.issuperset(set(ing)):
print( "You can make", key )
遍历您的食谱字典并过滤到您拥有所有配料的食谱:
breakfast_recipes = {
"cerealBowl" : ["milk", "cereal"],
"toast" : ["bread", "butter"],
"eggsBacon" : ["eggs", "bacon"],
"frenchToast" : ["bread", "eggs"]
}
def get_recipes(ingredients):
return {
r: i for r, i in breakfast_recipes.items()
if set(ingredients).issuperset(set(i))
}
current_ingredients = ["milk", "bread", "rice", "butter", "eggs"]
print("Meals available to make...")
for r, i in get_recipes(current_ingredients).items():
print(f"{r} with {i}")
Meals available to make...
toast with ['bread', 'butter']
frenchToast with ['bread', 'eggs']
可用餐点
对于 breakfast
中的每顿饭,您可以查看每种必需的成分是否在您的 currentIngredients
列表中:
available_meals = []
for meal, ingredients in breakfast.items():
available_ingrs = 0
for ingr in ingredients:
if ingr in currentIngredients:
available_ingrs += 1
if available_ingrs == len(ingredients): #if all required ingredients were met
available_meals.append((meal, ingredients))
其他答案更优雅,因为它们使用 issuperset
方法。
如果 A 包含 B 的所有元素,则称 A 是 B 的超集。
在这种情况下,如果 currentIngredients
包含 ingredients
的所有元素:
,则 currentIngredients
可能是 ingredients
的超集
set(currentIngredients).issuperset(ingredients) #returns a boolean
注意issuperset
函数是set
类型的方法。这就是为什么你必须将 currentIngredients
转换为 set
.
打印输出
一个迭代 available_meals
列表的简单打印程序:
def printMeals():
print("Meals available to make...")
for elem in available_meals:
print(repr(elem[0]), "with", elem[1])
使用 python.
尝试制作一个食谱程序,告诉我可以根据当前的食材(清单)制作哪些餐点(关键)。
这是我的膳食字典,key是膳食,value是所需的食材:
breakfast = {
"cerealBowl" : ["milk", "cereal"],
"toast" : ["bread", "butter"],
"eggsBacon" : ["eggs", "bacon"],
"frenchToast" : ["bread", "eggs"]
}
这是我目前拥有的配料清单:
currentIngredients = ["milk", "bread", "rice", "butter", "eggs"]
如果所有值都在我当前的配料表中,我希望程序 return 我可以做的饭菜(关键)。
到目前为止我有:
def scanRecipes():
for item in currentIngredients:
我不确定如何设置我的 next for loop/if 语句来迭代我的早餐字典值并将成分与我的当前成分列表进行比较。
希望获得类似于以下内容的输出:
"Meals available to make..." "toast" with ["bread", "butter"],"frenchToast" with ["bread", "eggs"]
currentIngredients = set(["milk", "bread", "rice", "butter", "eggs"])
for key,ing in breakfast.items():
if currentIngredients.issuperset(set(ing)):
print( "You can make", key )
遍历您的食谱字典并过滤到您拥有所有配料的食谱:
breakfast_recipes = {
"cerealBowl" : ["milk", "cereal"],
"toast" : ["bread", "butter"],
"eggsBacon" : ["eggs", "bacon"],
"frenchToast" : ["bread", "eggs"]
}
def get_recipes(ingredients):
return {
r: i for r, i in breakfast_recipes.items()
if set(ingredients).issuperset(set(i))
}
current_ingredients = ["milk", "bread", "rice", "butter", "eggs"]
print("Meals available to make...")
for r, i in get_recipes(current_ingredients).items():
print(f"{r} with {i}")
Meals available to make...
toast with ['bread', 'butter']
frenchToast with ['bread', 'eggs']
可用餐点
对于 breakfast
中的每顿饭,您可以查看每种必需的成分是否在您的 currentIngredients
列表中:
available_meals = []
for meal, ingredients in breakfast.items():
available_ingrs = 0
for ingr in ingredients:
if ingr in currentIngredients:
available_ingrs += 1
if available_ingrs == len(ingredients): #if all required ingredients were met
available_meals.append((meal, ingredients))
其他答案更优雅,因为它们使用 issuperset
方法。
如果 A 包含 B 的所有元素,则称 A 是 B 的超集。
在这种情况下,如果 currentIngredients
包含 ingredients
的所有元素:
currentIngredients
可能是 ingredients
的超集
set(currentIngredients).issuperset(ingredients) #returns a boolean
注意issuperset
函数是set
类型的方法。这就是为什么你必须将 currentIngredients
转换为 set
.
打印输出
一个迭代 available_meals
列表的简单打印程序:
def printMeals():
print("Meals available to make...")
for elem in available_meals:
print(repr(elem[0]), "with", elem[1])