python:格式字符串中变量名称中的点

时间:2011-10-28 20:35:03

标签: python string-formatting

假设我在字段名称中有一个带点的字典,例如{'person.name': 'Joe'}。如果我想在str.format中使用它,是否可能?

我的第一直觉是

'Name: {person.name}'.format(**{'person.name': 'Joe'})

但这只有在我的字形形状像

时才有效
{'person':{'name':Joe}}

The relevant manual docs section无论如何都没有提到逃离点。

(旁注:我一般认为

def func(**kw): print(kw)
func(**{'a.b': 'Joe'})

会导致错误,但**展开的函数调用似乎仍然有效,即使它们不是有效标识符也是如此!但 错误输出非字符串。 O_O)

3 个答案:

答案 0 :(得分:6)

'Name: {0[person.name]}'.format({'person.name': 'Joe'})

答案 1 :(得分:4)

解决此问题的一种方法是使用旧的%格式(尚未弃用):

>>> print 'Name: %(person.name)s' % {'person.name': 'Joe'}
Name: Joe

答案 2 :(得分:0)

我有类似的问题,我通过继承string.Formatter

解决了这个问题
import string

class MyFormatter(string.Formatter):
    def get_field(self, field_name, args, kwargs):
        return (self.get_value(field_name, args, kwargs), field_name)

但是你不能使用str.format(),因为它仍然指向旧的格式化程序,你需要像这样

>>> MyFormatter().vformat("{a.b}", [], {'a.b': 'Success!'})
'Success!'