匹配列表中的多个单词

时间:2015-11-09 22:22:26

标签: python list parsing

我正在解析包含成分的字符串。

我将字符串分成单词列表 例如:

list1 = ['favorite','olive','oil']
list2 = ['favorite','oil']

我有一份我需要与列表中的单词匹配的成分列表。例如,

ingredients = ['sesame oil', 'olive oil', 'olive juice', 'oil']

我需要一个在第一个场景中返回olive oil而在第二个场景中返回oil的函数。

非常感谢任何提示和建议。

2 个答案:

答案 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)

顺便说一下这个阵列的顺序很明显,第一个位置是第一个找到最重要的最喜欢的位置,第二个位置是第二个找到最重要的最喜欢的等等......它不会无论多少收藏和多少成分,只要收藏列表按照您希望的顺序总是给予回馈。希望这有帮助!