2016-08-14 67 views
0

具有以下字典:应用re.sub不匹配嵌套字典

interfaces = {'A':{'568':'A1','590':'A2'},'B':{'590':'B2'}} 

我什么来替换值=“590”与A2在设置A元素和B2而设置B元件。

我已经试过:

pattern_interfaces = r'\b({})\b'.format('|'.join(sorted(re.escape(k) for k in interfaces['A']))) #=>(568|590) 

re_value = re.sub(pattern_interfaces, lambda m: interfaces.get(m.group(0).upper()), value, flags=re.IGNORECASE) 

re_value是空白。

任何人都可以解释这是为什么。

Thx。

[更新]

好了,我看到我的错拉姆达玛:接口[ 'A']没有我需要的东西。

+0

描述非常含糊。我想知道你为什么使用're'来改变字典。请显示您的预期输出 –

回答

0

您与interfaces['A']中的键匹配,而不是从interfaces中匹配。使用嵌套的字典,如果你打算从密钥产生一个正则表达式:

re_value = re.sub(
    pattern_interfaces, 
    lambda m: interfaces['A'][m.group(0).upper()], 
    value, flags=re.IGNORECASE) 

我更换了dict.get()电话直接订购;您只能将现有密钥与您的正则表达式匹配,无需在此处说明丢失的密钥。

您的示例还匹配了数字,而不是字母,因此.upper()调用和re.IGNORECASE都不会在这里有所作为。