我有两个这样的字典,
in_dict = {
'1': 'active_rate',
'2': 'purchase_per_active'
}
formula = {
'total_purchase': 'B1*B2'
}
我需要在 formula
的值中找到整数字典 'B1*B2'
然后从 in_dict
中获取与整数对应的整数值字典,最后替换 B1
与 active_rate
和 B2
与 purchase_per_active
.
- 第 1 步:从
formula
中提取数字字典。例如['1','2']
在我们的案例中。 - 第 2 步:搜索
in_dict
中的键dict 并得到相应的值。 - 第 3 步:替换为
formula
用于在步骤 2 中生成的值的字典。
所以,最终 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'
与 'purchase_per_active'
?
此处显示的示例仅供示例。代码性质应该是通用的。
最佳答案
您可以使用函数使用正则表达式替换来直接查找每个参数:
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'}
关于python - 从列表中搜索并替换字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31022297/