Convert for loops to list comprenshion

Question:

is there a way to convert the below statements to one list comprenshion

def find_gender(gender_data):
    gender = {
        "Women": ["women", "women's", "female"],
        "Men": ["men", "men's", "male"],
    }
    gender_data = gender_data.lower()
    for gender_key, gender_items in gender.items():
        for word in gender_items:
            if gender_data.find(word) is not -1:
                return gender_key
    return "Unisex"

the output should be only one string i.e ‘Men’ or ‘Women’ or ‘Unisex’

Answers:

As you want a single result, a list comprehension is a poor choice of tool. However, we can readily directly translate your loops into a generator expression, and pass that to next, providing a default value of 'Unisex'.

def find_gender(gender_data):
    gender = {
        "Women": ["women", "women's", "female"],
        "Men": ["men", "men's", "male"],
    }
    gender_data = gender_data.lower()
    
    return next((gender_key 
                 for gender_key, gender_items in gender.items() 
                 for word in gender_items
                 if gender_data.find(word) is not -1),
                'Unisex')
Answered By: Chris

Code below uses two list/generator comprehensions and the any() method. And with changed data structure achieves in my eyes a simple self-explaining and short structure.

def find_gender(gender_data): 
    gender_data = gender_data.lower()
    woman = ["women","women's","female"]
    man   = ["men"  ,"men's"  ,"male"  ]
    if any(s for s in woman if s in gender_data): return "Woman"
    if any(s for s in man   if s in gender_data): return "Men"
    return "Unisex"
Answered By: Claudio