2012-07-05 75 views
1

我有一个基于项目名称的字母来混淆的项目列表。例如:基于第一个字母的映射字符串

ABC_Classified 
BXY_Classified 
ZX_Classified 

重点:

A -> Adam 
B -> Bale 
Z -> Talking 

结果:

ABC_Classified ==> Adam 
BXY_Classified ==> Bale 
ZX_Classified ==> Talking 

做到这一点的第一种方式,这将是非常重复,将是具有本26个if/elif声明。

什么是最好和最简洁的方式来完成上述?

回答

1

使用字典?

mapping = { 
    'A': 'Adam', 
    'B': 'Bale', 
    'Z': 'Talking' 
    # etc... 
} 

name = mapping[your_string[0]] 

如果查找失败,它会抛出一个KeyError异常

2

您可以使用字典字母映射到名称,再搭上如果一个空字符串中传递KeyError根本不存在的键和IndexError

names = { 
    'A': 'Adam', 
    'B': 'Bale', 
    ... 
    'Z': 'Talking' 
} 

def obfuscate(s): 
    try: 
     return names[s[0]] 
    except (KeyError, IndexError): 
     return None 
1

我必须说,我不确定这个混淆的目的究竟是什么,但是这就像你要找的东西?

# the name strings 
names = ["ABC_Classified","BXY_Classified","ZX_Classified"] 

# the letter-to-obfuscated string mappings 
key = { "A":"Adam", "B":"Bale", "Z":"Talking" } 

# doing a lookup 
key[ names[0][0] ] # ABC_Classified ==> Adam 

# optionally create a new, direct mapping 
dict([ (obf, key[ obf[0] ]), for obf in names ]) 
# {'BXY_Classified': 'Bale', 'ABC_Classified': 'Adam', 'ZX_Classified': 'Talking'} 
相关问题