1

我有一些方程的字符串,其中包括变量。例如:

eq='(a+1)*c-d'

我也有带有变量值的字典。例如:

val={'a':5,'c':'k','d':'300n'}

如您所见,在相同情况下,变量的值可以是其他变量,并且在某些情况下,并非所有来自 eq 的变量都在 val 中。

我需要用 val 中的值替换 eq 中的所有变量。当然,直接的代码将类似于:

for v in val.keys():
  eq=re.sub(v,val[v],eq)

但此代码在某些情况下会失败。例如,在变量列表中将是变量“n”和“nn”

那么,有人可以考虑更好的解决方案吗?谢谢你。

4

2 回答 2

1

尝试:

for k,v in val.items():
    eq = re.sub(r'\b' + k + r'\b', v, eq)

这将按变量的全名搜索变量,即如果val = {'x': '5'}和 等式包含像“xx”、“x2”甚至“2x”这样的子字符串,这些字符串将不会被替换。

于 2012-10-06T18:53:50.173 回答
0

另一种方法需要稍微改变公式并使用字符串函数“格式”。

使用关键字参数(不是很编程):

>>> '({a}+1)*{c}-{d}'.format(a=5, c='k', d='300n')
'(5+1)*k-300n'

或者使用字典:

>>> '({a}+1)*{c}-{d}'.format(**{'a': 5, 'c': 'k', 'd': '300n'})
'(5+1)*k-300n'

这样做可以帮助用户识别某些东西什么时候没有被替换,或者什么时候应该被替换,并大大简化了代码。

于 2012-10-06T19:02:37.943 回答