如果条件设置为真,则找到 return 键的最优雅方式
Find most elegant way to return key if condition is set to true
我有一本 python 字典
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'}
现在我想 return 第一个 true 条件的键。在本例中是 branch_1
.
我的解决方案是:
# 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
由于分支的数量可以很长,我想知道是否有更优雅的方法来获得相同的结果?!也许 if / elif / else
然后是 return 键?甚至完全不同的东西?最后我需要的只是真实条件的名称。因此,甚至可能不需要使用字典。
求灵感!
您可以尝试使用 iterator。它会在没有遍历整个“对象”的情况下获得第一个匹配项后立即停止。
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])
或
true_branch = next((k for k, condition in con_dict.items() if condition), None)
print(true_branch)
我有一本 python 字典
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'}
现在我想 return 第一个 true 条件的键。在本例中是 branch_1
.
我的解决方案是:
# 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
由于分支的数量可以很长,我想知道是否有更优雅的方法来获得相同的结果?!也许 if / elif / else
然后是 return 键?甚至完全不同的东西?最后我需要的只是真实条件的名称。因此,甚至可能不需要使用字典。
求灵感!
您可以尝试使用 iterator。它会在没有遍历整个“对象”的情况下获得第一个匹配项后立即停止。
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])
或
true_branch = next((k for k, condition in con_dict.items() if condition), None)
print(true_branch)