我有一组标准可以写成if statements
的复杂部分,但我认为必须有更好的方法。
说我有以下数据,并且如果满足条件,我想返回给定的值。在不编写if then
语句的情况下该如何做?还是if then
是最好的方法?
{event_type: type1, outcome: outcome1 } return red
{event_type: type1, outcome: outcome2 } return yellow
{event_type: type1, outcome: outcome3 } return blue
{event_type: type2, outcome: outcome1 } return yellow
{event_type: type2, outcome: outcome2 } return red
{event_type: type2, outcome: outcome4 } return blue
{event_type: type3, outcome: outcome5 } return yellow
{event_type: type3, outcome: outcome2 } return red
{event_type: type2, outcome: outcome1 } return blue
答案 0 :(得分:1)
如上所述,最好的方法是使用字典。这是一个示例,其中第一个数字对应事件类型,第二个数字对应结果类型:
color_event_dict = {
(1, 1): 'red',
(1, 2): 'yellow',
(1, 3): 'blue',
(2, 1): 'yellow',
(2, 2): 'red',
(2, 3): 'blue',
(3, 1): 'yellow',
(3, 2): 'red',
(3, 3): 'blue',
}
用法的一个示例是:
color_event_dict[(3,1)]
#> 'yellow'
您可以将对象放在字典的两侧,而不是整数和字符串。
答案 1 :(得分:1)
您可以使用字典来获得与switch语句相似的功能。我相信这就是您要寻找的
def foo(event_type, outcome):
return {
"type1": {
"outcome1": "red",
"outcome2": "yellow",
},
"type2": {
"outcome1": "blue",
"outcome2": "orange",
},
}.get(event_type, {}).get(outcome, None)
foo("type1", "outcome1") #'red'
答案 2 :(得分:0)
我建议您使用字典,根据类型/结果键收集所有可能的颜色值,如下所示:
result = {'type1' : {'outcome1': 'red', 'outcome2': 'yellow', 'outcome3': 'blue'},
'type2' : {'outcome1': 'yellow', 'outcome2': 'red', 'outcome4': 'blue'},
'type3' : {'outcome5': 'yellow', 'outcome2': 'red', 'outcome1': 'blue'}}
event_type ='type2'
outcome = 'outcome4'
print(result[event_type][outcome]) # blue