2015-11-09 3 views
1

Я работаю над разбором строк, содержащих ингредиенты.Совпадение нескольких слов в списке

я нарушу строк в списки слов Например:

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

И у меня есть список ингредиентов, которые мне нужно, чтобы соответствовать со словами в списке. Например,

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

Мне нужна функция, которая возвращает olive oil в первом сценарии и oil во втором.

Любые советы и рекомендации приветствуются.

+1

Какой код вы писали? –

ответ

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'] 
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) 

Таким образом, становится ясно, в порядке массива, где первая позиция является первым нашел любимое наиболее важное значение, вторая позиция является второй нашел любимый самый важный и т. д. ... Неважно, сколько избранных и сколько ингредиентов, пока список избранных находится в том порядке, в котором вы хотите, чтобы тот же самый порядок всегда возвращался. Надеюсь это поможет!

Смежные вопросы