多级dict的Python字符串格式

时间:2014-04-07 05:42:33

标签: python string-formatting

从模板字符串渲染值的常用技术如下所示:

>>> 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。

1 个答案:

答案 0 :(得分:2)

您可以在字符串中使用{data[name]}代替{data["name"]}来完成此操作。

您可以在格式字符串中指定的内容类型受到限制。不允许使用任意表达式,并且以简化的方式解释键,如the documentation中所述:

  

无法在格式字符串中指定任意字典键(例如,字符串'10'':-]')。

在这种情况下,您可以获取密钥,因为它是一个简单的字母数字字符串,但是,正如文档建议的那样,您不能总是这样做。如果您有奇怪的dict键,您可能需要更改它们以在格式字符串中使用它们,或者使用其他方法(例如使用+显式连接字符串值)。