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

标签 python regex dictionary

我有两个这样的字典,

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

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

我需要在 formula 的值中找到整数字典 'B1*B2'然后从 in_dict 中获取与整数对应的整数值字典,最后替换 B1active_rateB2purchase_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/

相关文章:

Python 正则表达式命名捕获组

python - 扩展 ASCII 字符转换

python - 如何在 django 中使用主键对 url 进行反向操作

regex - awk 中的 "illegal primary"是什么?

javascript - JS map 返回对象

python - tensorflow 稀疏算法

python - 我在 Pandas 系列中这样做时的值(value)在哪里

php - 在 mysql 中使用 REGEX 对特定字符进行严格的数字检查

c# - 两个数组合并成一个字典

ios - swift 中字典键的数组