我有两个这样的字典,
in_dict = {
'1': 'active_rate',
'2': 'purchase_per_active'
}
formula = {
'total_purchase': 'B1*B2'
}
我需要在formula
dict 'B1*B2'
的值中找到整数,然后从in_dict
字典中获取与整数对应的整数值,最后替换{{1} } B1
和active_rate
B2
。
purchase_per_active
字典中提取数字。例如formula
。['1','2']
dict中搜索密钥并获取相应的值。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'
?
此处显示的示例仅供参考。代码性质应该是通用的。
答案 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'}