从lis中搜索并替换字符串中的字符

2024-09-30 20:37:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个这样的字典

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

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

我需要在formuladict 'B1*B2'的值中找到整数,然后从in_dict字典中得到整数对应的值,最后将B1替换为active_rate,将B2替换为purchase_per_active。你知道吗

  • 步骤1:从formuladict中提取数字。例如在我们的例子中['1','2']。你知道吗
  • 第二步:在in_dictdict中搜索键并得到相应的值。你知道吗
  • 步骤3:在formuladict中替换步骤2中生成的值。你知道吗

所以,最后的formuladict应该是

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']

现在,如何用'active_rate'替换'B1',用'purchase_per_active'替换'B2'?你知道吗

这里显示的示例只是示例。代码性质应该是泛型的。你知道吗


Tags: 代码in字典rate步骤整数purchaseb2
1条回答
网友
1楼 · 发布于 2024-09-30 20:37:58

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

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'}

相关问题 更多 >