我有一个要根据项目名称的字母混淆的项目列表。例如:
ABC_Classified
BXY_Classified
ZX_Classified
钥匙:
A -> Adam
B -> Bale
Z -> Talking
结果:
ABC_Classified ==> Adam
BXY_Classified ==> Bale
ZX_Classified ==> Talking
第一种方法是非常重复的,为此有 26if/elif条语句。
完成上述任务的最佳和最简洁的方法是什么?
我有一个要根据项目名称的字母混淆的项目列表。例如:
ABC_Classified
BXY_Classified
ZX_Classified
钥匙:
A -> Adam
B -> Bale
Z -> Talking
结果:
ABC_Classified ==> Adam
BXY_Classified ==> Bale
ZX_Classified ==> Talking
第一种方法是非常重复的,为此有 26if/elif条语句。
完成上述任务的最佳和最简洁的方法是什么?
您可以使用字典将字母映射到名称,然后捕获KeyError不存在的键,IndexError以防传入空字符串。
names = {
'A': 'Adam',
'B': 'Bale',
...
'Z': 'Talking'
}
def obfuscate(s):
try:
return names[s[0]]
except (KeyError, IndexError):
return None
使用字典?
mapping = {
'A': 'Adam',
'B': 'Bale',
'Z': 'Talking'
# etc...
}
name = mapping[your_string[0]]
如果查找失败,它会抛出一个 KeyError
我必须说,我不确定这种混淆的确切目的是什么,但这和你要找的一样吗?
# 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'}