re.sub不匹配嵌套字典

时间:2016-08-14 21:16:15

标签: python dictionary

使用以下词典:

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

在设置B元素的同时设置A元素和B2时,用A2替换值='590'。

我试过了:

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。

[更新]

好吧,我知道我错在哪里lambda m:interfaces ['A']做我需要的。

1 个答案:

答案 0 :(得分: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都不会产生影响。