在字典中进行格式字符串替换

时间:2014-11-10 04:25:06

标签: python string dictionary

我目前正试图弄清楚字典中是否存在某种“软代码”值,并且能够将固定字符串替换为稍后的值。换句话说,就像我们如何使用字符串一样,可以执行以下操作:

environment = """{'SDC_PERIOD':'%(period)s','FAMILY':'%(legup_family)s','DEVICE_FAMILY':'"%(fpga_family)s"','DEVICE':'%(fpga_device)s'}""" % self

并用environment实例命名空间字典将给定的所需值替换为self字符串对象,我希望能够实际直接替换到字典本身,可能如下所示?

environment = {'SDC_PERIOD':'%(period)s','FAMILY':'%(legup_family)s','DEVICE_FAMILY':'"%(fpga_family)s"','DEVICE':'%(fpga_device)s'} % self

但是,我知道这是不允许的,因为字典对象类型不支持%操作数,所以上面的行不起作用,但我只是用它来表达我的目标是能够创建将字符串对象替换为“软编码”值的字典。

现在,由于我不知道能否将字符串替换为字典值,我别无选择,只能执行以下操作:

import ast
environment = """{'SDC_PERIOD':'%(period)s','FAMILY':'%(legup_family)s','DEVICE_FAMILY':'"%(fpga_family)s"','DEVICE':'%(fpga_device)s'}""" % self
env_dict = ast.literal_eval(environment)

以便能够使用所需的键:值对获取字典对象。

然而,这似乎对于使用正确的键值获取字典对象这么简单的事情来说太过分了。如果有人对我有任何其他建议,我将不胜感激。

谢谢!

3 个答案:

答案 0 :(得分:1)

我可能会误解,但也许你可以像这样直接建立字典:

environment = {
    'SDC_period': '{0}s'.format(self.period),
}

答案 1 :(得分:0)

您可以始终将dict子类化,并为其提供一种结合__getitem__%操作的新方法。我会调用该方法interpolate

class envdict( dict ):
    def interpolate( self, key, replacements ):
        return self[ key ] % replacements

environment = envdict( SDC_PERIOD='%(period)s' )
val = environment.interpolate( 'SDC_PERIOD', { 'period' : 'whatever' } )
print val

答案 2 :(得分:0)

如果您想对包含dict值(或任何字符串)的字符串进行一些复杂的插值,您可以使用format

>>> period_val  = "1970"
>>> family_val = "Smith"
>>> environment = {'SDC_PERIOD': '{period}s'.format(period = period_val), 'FAMILY': '{legup_family}s'.format(legup_family = family_val)}
>>> print environment
{'SDC_PERIOD': '1970s', 'FAMILY': 'Smiths'}

对于像上面这样简单的字符串,我可能会使用数字引用(即{0},因为它的输入较少),而且对于没有插值的情况,我会直接使用变量赋值,但对于更复杂的插值,比如你是将3个或4个变量插入到一个字符串中,按名称引用事物可以帮助代码变得更清晰。

以下是format的更多信息。