0

特定の条件が満たされた後にdictを作成しようとしています。コード スニペットは次のとおりです。

def dic_gen(exc):
    param_errors = {re.sub(r"sss_", r"aaa_",err.name): err.address for err in exc.errors }
    param_errors["status"] = "ERROR"
    return param_errors

上記のコードが行っていることは、err.name に sss_ があるかどうかを確認し、それを削除して dict を作成することです。ここで、「ttt_」がある場合は「bbb_」に置き換えるという別の条件も追加したいのですが、re.sub を使用してそれは可能ですか? またはそれを行う最も効率的な方法は何ですか?

ありがとう、

4

2 に答える 2

0

置換文字列の代わりに関数を渡すことre.sub()で、次のようにすることができます。

def func(matchobj):
    return 'aaa_' if matchobj.group(0) == 'sss_' else 'bbb_'

def dic_gen(exc):
    param_errors = {re.sub(r'(sss_)|(ttt_)', func, err.name):
                       err.address for err in exc.errors}
    param_errors["status"] = "ERROR"
    return param_errors

関数は単なる式なので、それから を作成しlambda、外部関数定義を避けることができます (コードが読みにくくなりますが):

def dic_gen(exc):
    param_errors = {re.sub(r'(sss_)|(ttt_)', 
        lambda mo: 'aaa_' if mo.group(0) == 'sss_' else 'bbb_', err.name):
        err.address for err in exc.errors}
    param_errors["status"] = "ERROR"
    return param_errors
于 2013-04-20T14:59:31.553 に答える
0

あなたが re で何をするつもりなのかわかりませんが、私は使用します:

abc = "Something_sss whatever"
result = abc.replace("_sss","_ttt")
print result

結果:

"Something_ttt whatever"
于 2013-04-20T14:09:05.480 に答える