从列表中搜索并替换字符串中的字符

时间:2015-06-24 09:06:19

标签: python regex dictionary

我有两个这样的字典,

in_dict = {
    '1': 'active_rate',
    '2': 'purchase_per_active'
}

formula = {
    'total_purchase': 'B1*B2'
}

我需要在formula dict 'B1*B2'的值中找到整数,然后从in_dict字典中获取与整数对应的整数值,最后替换{{1} } B1active_rate B2

  • 第1步:从purchase_per_active字典中提取数字。例如formula
  • 步骤2:在['1','2'] dict中搜索密钥并获取相应的值。
  • 步骤3:在in_dict dict中替换步骤2中生成的值。

所以,最终formula dict应该像

formula

到目前为止的代码

formula = {
    'total_purchase': 'active_rate*purchase_per_active'
}

现在,如何将for key, value in formula.items(): numbers = re.findall("\d+", value) # ['1','2'] values = [in_dict.get(num) for num in numbers] # ['active_rate', 'purchase_per_active'] 替换为'B1',将'active_rate'替换为'B2'

此处显示的示例仅供参考。代码性质应该是通用的。

1 个答案:

答案 0 :(得分:3)

您可以使用函数来使用正则表达式替换来直接查找每个参数:

import re

in_dict = {
    '1': 'active_rate',
    '2': 'purchase_per_active'
}

formula = {
    'total_purchase': 'B1*B2'
}

def lookup(number):
    return in_dict[number.group(1)]

for key, value in formula.items():
    formula[key] = re.sub("[a-zA-Z](\d+)", lookup, value)

print formula

这给出了以下输出:

  

{'total_purchase':'active_rate * purchase_per_active'}

对我而言,in_dict存储的密钥(例如'B1','C1')可能会更有意义。

import re

in_dict = {
    'A1': 'active_rate1',
    'A2': 'purchase_per_active1',
    'B1': 'active_rate2',
    'B2': 'purchase_per_active2'
}

formula = {
    'total_purchase': 'B1*B2',
    'total_purchase2': 'A1*A2'
}

def lookup(cell):
    return in_dict[cell.group(1)]

for key, value in formula.items():
    formula[key] = re.sub("([a-zA-Z]\d+)", lookup, value)

print formula
  

{'total_purchase2':'active_rate1 * purchase_per_active1',   'total_purchase':'active_rate2 * purchase_per_active2'}