我正在解析包含成分的字符串。
我将字符串分成单词列表 例如:
list1 = ['favorite','olive','oil']
list2 = ['favorite','oil']
我有一份我需要与列表中的单词匹配的成分列表。例如,
ingredients = ['sesame oil', 'olive oil', 'olive juice', 'oil']
我需要一个在第一个场景中返回olive oil
而在第二个场景中返回oil
的函数。
非常感谢任何提示和建议。
答案 0 :(得分:1)
这将提供其中一个列表与成分之间重叠的列表。如果列表中的多个项目位于成分集中,这可能很有用。
def ingredient_checker(checklist):
ingredients = ['sesame oil', 'olive oil', 'olive juice', 'oil']
return [item for item in set(checklist).intersection(ingredients)]
>>> list3 = ['favorite','olive','oil', 'olive juice']
>>> ingredient_checker(list3)
['oil', 'olive juice']
答案 1 :(得分:0)
你的意思很难:"在第一个场景"和"第二种情况"。这是相当模糊的。
鉴于此,我会提出建议。作为数据结构最好的方法是按顺序将列表作为收藏夹,然后按顺序返回匹配成分列表。如果我不得不写这个,我可能会写更多这样的东西:
favorites = [['olive', 'oil'], ['oil']]
ingredients = ['sesame oil', 'olive oil', 'olive juice', 'oil']
def get_favorite_ingredients(favorite_list=[], ingred=[]):
matched = []
for fav in favorite_list:
if ' '.join(fav) in ingred:
matched.append(' '.join(fav))
return matched
# this returns: ['olive oil', 'oil']
print get_favorite_ingredients(favorites, ingredients)
顺便说一下这个阵列的顺序很明显,第一个位置是第一个找到最重要的最喜欢的位置,第二个位置是第二个找到最重要的最喜欢的等等......它不会无论多少收藏和多少成分,只要收藏列表按照您希望的顺序总是给予回馈。希望这有帮助!