1

項目名の文字に基づいて難読化したい項目のリストがあります。例えば:

ABC_Classified
BXY_Classified
ZX_Classified

鍵:

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

結果:

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

これを行う最初の方法は、非常に反復的ですが、if/elifこれに対して 26 のステートメントを用意することです。

上記を達成するための最良かつ最も簡潔な方法は何ですか?

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 に答える