Python: проверьте, содержится ли ключ в словаре в строке в списке

#python #string #dictionary #parsing

#python #строка #словарь #синтаксический анализ

Вопрос:

Мне нужно проанализировать список, содержащий строки в каждом индексе, и подсчитывать каждый раз, когда встречается определенное слово.

     pesc = 0 
    herbivore = 0
    vegan = 0
    food_dict = {'fish':'pesc', 'meat':'herbivore','plant':'vegan','chicken':'herbivore'}
    PeopleDiet = ['momeatschickenandavideatsfish','dadwilleatsplantandchicken','brotherlikestoeatfishandmeat']
 
     for key in food_dict.keys():
        for i in PeopleDiet:
           if str(key) in PeopleDiet[i]:
             pesc = pesc 1
             plant = plant  1
             herbivore = herbivore  1
             print(index)
             print(pesc)
             print(plant)
             print(herbivore)
 

Прямо сейчас код ничего не выводит, но в идеале
Я бы хотел что-то вроде для каждого индекса:

травоядное = 1, рыба = 1, для индекса 1 веган = 1, травоядное = 1, для индекса 2 pesc = 1, травоядное = 1 для индекса 3

Любая помощь была бы отличной! Большое вам спасибо

Комментарии:

1. Попробуйте написать, что вы собираетесь делать для каждой строки кода, простыми английскими словами, а затем посмотрите, имеет ли это смысл. Если это не имеет смысла, сначала исправьте это. Если это так, попробуйте выяснить, какая часть кода не выполняет то, что вы ожидаете. Пожалуйста, также прочитайте ericlippert.com/2014/03/05/how-to-debug-small-programs

Ответ №1:

Строка for i in PeopleDiet уже перебирает все строки, а не индексы, поэтому PeopleDiet[i] не имеет смысла. Вы хотите проверить, если:

key in i

Немного очистите свой код:

     for key in food_dict:
        for idx, elem in enumerate(PeopleDiet):
           if key in elem:
             print(...)
 

Здесь idx будет индекс для каждого элемента elem в списке PeopleDiet

Ответ №2:

Когда вы запускаете for i in PeopleDiet: , i вводится ли строка PeopleDiet , это вызовет ошибку, потому что вы хотите получить значение, выполнив PeopleDiet[string type] .

На основе того, что вы хотите:

herbivore = 1, fish = 1, для индекса 1…

который смущает, что вывод должен быть либо ключом 'fish' , либо значением 'herbivore' в food_dict

Для устранения вашего исключения код может быть :

 food_dict = {'fish':'pesc', 'meat':'herbivore','plant':'vegan','chicken':'herbivore'}
PeopleDiet = ['momeatschickenandavideatsfish','dadwilleatsplantandchicken','brotherlikestoeatfishandmeat']
i = 0
while PeopleDiet:
    string = PeopleDiet.pop()
    for f in food_dict.keys():
        if f in string:
            print('for index = {0}, {1} = 1 ('.format(i, food_dict[f]), f, 'hits in "{}"'.format(string), ')')
    i  = 1
 

и вывод:

 for index = 0, pesc = 1 ( fish hits in "brotherlikestoeatfishandmeat" )
for index = 0, herbivore = 1 ( meat hits in "brotherlikestoeatfishandmeat" )
for index = 1, vegan = 1 ( plant hits in "dadwilleatsplantandchicken" )
for index = 1, herbivore = 1 ( chicken hits in "dadwilleatsplantandchicken" )
for index = 2, pesc = 1 ( fish hits in "momeatschickenandavideatsfish" )
for index = 2, herbivore = 1 ( meat hits in "momeatschickenandavideatsfish" )
for index = 2, herbivore = 1 ( chicken hits in "momeatschickenandavideatsfish" )