假设我在字段名称中有一个带点的字典,例如{'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)
答案 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!'