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_ 然后将其删除并创建一个字典。现在我还想添加另一个条件,如果它有“ttt_”然后用“bbb_”替换它是否可以使用re.sub?或者最有效的方法是什么?

谢谢,

4

2 回答 2

0

我不知道你打算用 re 做什么,但我会使用:

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

结果:

"Something_ttt whatever"
于 2013-04-20T14:09:05.480 回答
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 回答