繁体   English   中英

多级字典的Python字符串格式

[英]Python string formatting of multi-level dict

从模板字符串呈现值的常用技术如下:

>>> num = 7
>>> template = 'there were {num} dwarves'
>>> print template.format(**locals())
there were 7 dwarves

该方法适用于具有__str__方法的任何数据类型,例如__str__

>>> data = dict(name='Bob', age=43)
>>> template = 'goofy example 1 {data}'
>>> print template.format(**locals())
goofy example 1 {'age': 43, 'name': 'Bob'}

但是当键引用字典项时它不起作用:

>>> 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'] 到目前为止,我唯一可行的方法是将这些值复制到仅用于字符串格式化的标量变量中,这很麻烦。

您可以通过在字符串中使用{data[name]}而不是{data["name"]}来做到这一点。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM