Home > Software design >  Find most elegant way to return key if condition is set to true
Find most elegant way to return key if condition is set to true

Time:05-14

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!

CodePudding user response:

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)
  • Related