如何最好地替换Python中的许多if语句

时间:2018-08-08 12:16:03

标签: python

我有一组标准可以写成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

3 个答案:

答案 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