从模板字符串渲染值的常用技术如下所示:
>>> num = 7
>>> template = 'there were {num} dwarves'
>>> print template.format(**locals())
there were 7 dwarves
此方法适用于具有__str__
方法的任何数据类型,例如类型的字典:
>>> data = dict(name='Bob', age=43)
>>> template = 'goofy example 1 {data}'
>>> print template.format(**locals())
goofy example 1 {'age': 43, 'name': 'Bob'}
但是,当按键引用dict项时,它不起作用:
>>> template = 'goofy example 2 {data["name"]}'
>>> print template.format(**locals())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: '"name"'
在格式字符串中使用时,在格式字符串之外的代码中有效的标识符无效是不方便的,而且看起来很奇怪。我错过了什么吗?有没有办法做到这一点?
我希望能够在嵌套字典结构中引用多个图层的元素,例如somedict['level1key']['level2key']['level3key']
。到目前为止,我唯一可行的方法是将这些值复制到标量变量,仅用于字符串格式化,这很icky。
答案 0 :(得分:2)
您可以在字符串中使用{data[name]}
代替{data["name"]}
来完成此操作。
您可以在格式字符串中指定的内容类型受到限制。不允许使用任意表达式,并且以简化的方式解释键,如the documentation中所述:
无法在格式字符串中指定任意字典键(例如,字符串
'10'
或':-]'
)。
在这种情况下,您可以获取密钥,因为它是一个简单的字母数字字符串,但是,正如文档建议的那样,您不能总是这样做。如果您有奇怪的dict键,您可能需要更改它们以在格式字符串中使用它们,或者使用其他方法(例如使用+
显式连接字符串值)。