построение функции с логикой поиска строк в python

#python #pandas

#python #pandas

Вопрос:

Я пытаюсь создать функцию, которая принимает a product и проверяет, содержит ли эта строка категорию в categories списке. Проверка не должна учитывать регистр, но при обнаружении первого совпадения функция должна возвращать значение, указанное в списке. Если продукт не содержит ни одной из категорий, должна быть возвращена строка ‘Other’.

Пример: if product = Debit card и categories = ['Account', 'Card', 'Debit'] then assign_category(product, categories) вернутся Card .

Это базовый код:

 def assign_category(product, categories):
    for x in range(len(categories)):
        if categories[x] == product:
            return product
        return 'Other'
  

Я изо всех сил пытаюсь найти способ, чтобы функция учитывала слово, когда оно точно не введено как таковое.
Список: ['Reporting', 'Card', 'Account', 'Debt', 'Loan', 'Mortgage']

одна запись в списке, которую нужно разбить Debit cards , так что она должна возвращать Card

любая помощь будет с благодарностью принята.

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

1. пожалуйста, вставьте некоторые примеры данных и ожидаемый результат

Ответ №1:

Используйте title() для проверки без учета регистра и используйте in для поиска категории в продукте. Вы также должны возвращать категорию, а не продукт. return 'Other' Statment должен быть вне цикла ‘for’. вот так:

 def assign_category(product, categories):
    for x in range(len(categories)):
        if categories[x] in product.title():
            return categories[x]
    return 'Other'
  

Я также рекомендую перебирать categories , а не range(len(categories)) (избыточно в соответствии с вопросом) следующим образом:

 def assign_category(product, categories):
    for category in categories:
        if category in product.title():
            return category
    return 'Other'
  

Ответ №2:

Вы хотите сравнить как продукт, так и категорию в нижнем регистре

 categories = ['Reporting', 'Card', 'Account', 'Debt', 'Loan', 'Mortgage']

def assign_category(product, categories):
    product = product.lower()
    for category in categories:
        if category.lower() in product:
            return category
    return 'Other'
  
 >>> assign_category("Debit card", categories)
'Card'