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。

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

您可以做的是定义一个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)
,

以防万一。没有正则表达式

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)
本文链接:https://www.f2er.com/3153083.html

大家都在问