假设我有一本字典,字段名称中带有点,例如
{'person.name': 'Joe'}
。如果我想在str.format
中使用这个,可以吗?
我的第一直觉是
'Name: {person.name}'.format(**{'person.name': 'Joe'})
但这只有在我的字典形状像这样的情况下才有效
{'person':{'name':Joe}}
相关手册文档部分没有提到转义点。
(旁注:我认为一般来说
def func(**kw): print(kw)
func(**{'a.b': 'Joe'})
会导致错误,但
**
扩展的函数调用似乎可以工作,即使它们是不是有效的标识符!不过,它在非字符串上确实会出错。 o_O)
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!'
%
格式(尚未弃用):
>>> print 'Name: %(person.name)s' % {'person.name': 'Joe'}
Name: Joe