如何在python中简化我的elif代码

时间:2016-04-04 07:30:00

标签: python

我是viswa。我使用elif命令准备了一个简单的代码。 我将分享代码和条件......它正在发挥作用。但我正在寻找简化的程序。如果有任何相同的结果可用

输入名称=' AEX_ABC',' AEX_XXX',' AEX_YYY',' CAI_XXX'' CAI_YYY&#39 ;....等等。, 输出应为AEX_1,AEX_2,AEX_3,CAI_1,CAI_2,......

程序:

||

2 个答案:

答案 0 :(得分:3)

您可以使用字典查找替换它。

stock_indices={<all stock indices:0>}
error=0
try:
    stock_indices[input[0]]+=1
except KeyError:
     error+=1

答案 1 :(得分:1)

正如Jesse Bakker所说,这是一本字典的工作。每当您发现自己创建一大堆变量名来跟踪一组相关项时,您应该使用字典代替。您可以使用dict文字来初始化字典,但是当所有项目具有相同的初始值时,使用dict.fromkeys类方法很方便,如下图所示。

为了保持代码行的简短,我将keys字符串拆分为两个字符串:Python将自动连接相邻的字符串文字,但我们需要用括号包装表达式,以便解析器知道它继续超过一行。

keys = ('AEX,CAI,CAR,CCA,CEL,CLM,CRE,ECH,FAV,FRE,'
    'GMP,INS,ROU,TAR,TAV,UAV,VEH,ERROR'.split(','))

stock_indices = dict.fromkeys(keys, 0)

def update_stock(name):
    key = name.partition('_')[0]
    if key not in stock_indices:
        key = 'ERROR'
    val = stock_indices[key] + 1
    stock_indices[key] = val
    return key, val

# Test
test = (
    'AEX_ABC', 
    'AEX_XXX', 
    'AEX_YYY', 
    'BAD_ZZZ',
    'CAI_XXX', 
    'CAI_YYY', 
)

for name in test:
    key, val = update_stock(name)
    print('{0}_{1}'.format(key, val))

<强>输出

AEX_1
AEX_2
AEX_3
ERROR_1
CAI_1
CAI_2