使用以下词典:
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']做我需要的。答案 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
都不会产生影响。