回车键(字典)如果值出现在列表中



我有一本字典:

meals = {'Pasta Bolognese' : ['pasta', 'tomato sauce', 'ground beef'],
'Cold Salad' : ['greens', 'tomato'],
'Warm Salad' : ['greens', 'tomato', 'corn', 'chickpeas', 'quinoa'],
'Sandwich' : ['bread', 'turkey slices', 'cheese', 'sauce']}

和一个列表:

ingredients = ['bread', 'chickpeas', 'tomato', 'greens']

我想从字典中获得一个键,如果它的所有值都存在于列表中。因此,在当前情况下,我想要"冷沙拉",因为"绿色"one_answers"西红柿"都在列表中。

您可以使用:

>>> next((k for k, v in meals.items() if set(v).issubset(ingredients)))
'Cold Salad'
>>> 

请注意,这段代码使用了next的生成器,也有一个更有效的方式来拥有多个in语句,而不是allin的循环,我使用set.issubset来检查一个集合中的所有值是否为另一个集合的子集

如果没有匹配,在末尾添加None:

next((k for k, v in meals.items() if set(v).issubset(ingredients)), None)

或者任何东西,你可以用任何东西代替None,例如"No Match"

可以这样使用列表推导式:

meals = {'Pasta Bolognese' : ['pasta', 'tomato sauce', 'ground beef'],
'Cold Salad' : ['greens', 'tomato'],
'Warm Salad' : ['greens', 'tomato', 'corn', 'chickpeas', 'quinoa'],
'Sandwich' : ['bread', 'turkey slices', 'cheese', 'sauce'], 
'Another Item': ['greens', 'bread']}
ingredients = ['bread', 'chickpeas', 'tomato', 'greens']
output = [key for key, value in meals.items() if set(value).issubset(ingredients)]
print(output)

结果:

['Cold Salad', 'Another Item']

您将注意到我添加了Another Item来测试是否返回多个匹配项。

相关内容

  • 没有找到相关文章

最新更新