减少if / else阻止

时间:2014-07-11 12:33:46

标签: python

我试图根据某些输入为变量赋值。这就是我目前所做的事情:

if a == 1:
    var = 'some_value'
elif a == 2:
    var = 'another_one'
elif a == 3:
    var = 'text_string'
elif a == 4:
    var = 'one_more'
elif a == 5:
    var = 'final_str'

所以基本上它根据var的值将给定值映射到a。这可能是以某种方式 pythonified 吗?

5 个答案:

答案 0 :(得分:14)

您可以使用字典:

var_map = {1: 'foo', 2: 'bar', 10: 'spam'}
var = var_map[a]

如果a是一个连续的整数,你也可以使用一个列表:

var_map = [None, 'some_value', 'another_one', 'text_string', 'one_more', 'final_str']
var = var_map[a]

此处var_map[0]设置为None以保持序列图简单。

答案 1 :(得分:1)

如果要多次阻止运行,可能需要使用字典。

d = {
      '1':'value_1',
      '2':'value_2',
      '3':'value_3',
      '4':'value_4',
      '5':'value_5'
    }

var = d[a]

答案 2 :(得分:1)

使用list或(恕我直言更好)a dict

VALUES = {1: "a", 2:"b", 3:"c", } # etc
var = VALUES.get(a, "some default value")

答案 3 :(得分:0)

由于你基本上有键/值对,如果你以相应的顺序对它们进行某种迭代,你可以这样结婚:

dictionary_for_a = {}
for x,y in zip(a,var):
    dictionary_for_a[x] = y

答案 4 :(得分:0)

我想你想做一个switch陈述。

这是我的方法:

# All conditions make a dict
condition = {1:'some_value',
             2:'another_one',
             3:'text_string',
             4:'one_more',
             5:'final_str'}

i = 4
if i in condition.keys():
    var = condition[i]

print var # 'one_more'