我有一些方程式的字符串,包括变量。例如:
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”
时那么,有人可以考虑更好的解决方案吗? 谢谢。
答案 0 :(得分:1)
尝试:
for k,v in val.items():
eq = re.sub(r'\b' + k + r'\b', v, eq)
这将按其全名搜索变量,即如果val = {'x': '5'}
和等式包含子串如“xx”,“x2”或甚至“2x”,则不会替换这些字符串。
答案 1 :(得分:0)
另一种方法需要围绕一个smidge更改公式,并使用字符串函数'format'。
使用关键字参数(不是非常程序化的):
>>> '({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'
这样做可以帮助用户识别什么时候没有被替换,或者意图被替换,并且可以简化代码。