2012-07-05 32 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'} 
相關問題