Search code examples
pythondictionarykey

Find most elegant way to return key if condition is set to true


I have a python dictionary

slot_a = 'a'
slot_b = 'b'

# dict which lists all possible conditions
con_dict = {"branch_1": slot_a == 'a' and slot_b == 'b',
            "branch_2": slot_a == 'a' and slot_b == 'c'}

Now I want to return the key for the first true condition. In this case it's branch_1.

My solution is:

# Pick only the condition which is set to True
true_branch = [k for k, v in con_dict.items() if v == True]

true_branch
>>> branch_1

Since the number of branches can be very long, I was wondering, if there might be a more elegant way to get the same result?! Maybe if / elif / else and then return key? Or even something completely different? All I need at the end is the name of the true condition. Therefore working with a dict may not even be necessary.

Just asking for inspiration!


Solution

  • You could try to use an iterator. It will stop as soon it gets the first match without going through the whole "object".

    ks, vs = zip(*con_dict.items()) # decoupling the list of pairs
    i = 0
    vs = iter(vs)     # terms are all booleans
    while not next(vs):
        i += 1
    
    del vs # "free" the iterator
    
    print(ks[i])
    

    or

    true_branch = next((k for k, condition in con_dict.items() if condition), None)
    print(true_branch)