1

我有一个要根据项目名称的字母混淆的项目列表。例如:

ABC_Classified
BXY_Classified
ZX_Classified

钥匙:

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

结果:

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

第一种方法是非常重复的,为此有 26if/elif条语句。

完成上述任务的最佳和最简洁的方法是什么?

4

3 回答 3

2

您可以使用字典将字母映射到名称,然后捕获KeyError不存在的键,IndexError以防传入空字符串。

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

def obfuscate(s):
    try:
        return names[s[0]]
    except (KeyError, IndexError):
        return None
于 2012-07-05T18:30:08.527 回答
1

使用字典?

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

name = mapping[your_string[0]]

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

于 2012-07-05T18:26:22.443 回答
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'}
于 2012-07-05T18:32:38.400 回答