Python:如何用字典中相应的数据替换字符串中的数值

2024-09-27 00:20:44 发布

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

我有这样一个逻辑表达式:

    expression = '(1 & 2) & 3'
    and a dictionary as, x = {1: '1', 2: '0', 3: '0'} 
    --- keys can be int or string, manageable

我需要把这根弦计算为

    '(1 & 2) & 3' 
    => '(x[1] & x[2]) & x[3]'
    => '(1 & 0) & 0'
    => eval('(1 & 0) & 0') = 0

我现在是这样做的:

    re.sub('(\d+)', r'x[\1]', expression)
    => '(x[1] & x[2]) & x[3]'
    but can't run eval on this

或者

    re.sub('(\d+)', eval(r'x[\1]'), expression)
    => eval(x[\1]) --> logical error 

请分享实现这一目标的有效解决方案。应用程序可以定义不同的表达式,其中一个表达式用于计算1000个字典(如x)


Tags: orandrestringdictionary表达式aseval
2条回答

以防有用。不带正则表达式

def complement_n(expression):
    expression_dict = {'1': '1','2': '0', '3': '0', '&':'&','(':'(',')':')',' ': ' '
    #expression_dict = dict(a='t', c='g', t='a', g='c'),
                      }
    comp_string = ''
    for base in expression:
        comp_string += expression_dict[base]
        ##comp_string += dna_complement.get(base, 'some_value')
    return comp_string

expression = '(1 & 2 ) & 3'
comp_string = complement_n(expression)
print ("Complement is:", comp_string)

您可以做的是定义一个lambda函数作为替换,并在字典中查找每个匹配项:

import re

expression = '(1 & 2) & 3'
d = {1: '1', 2: '0', 3: '0'} 

res = re.sub('(\d+)', lambda x: d[int(x.group(1))], expression)
#'(1 & 0) & 0'

eval(res)
# 0

如果表达式可能包含字典中不存在的整数,则可以调整如下内容:

res = re.sub('(\d+)', lambda x: d.get(int(x.group(1)), '0'), expression)

相关问题 更多 >

    热门问题