如何在Python格式的字符串中使用点?


问题内容

我想格式化字符串,并能够使用点操作,这样我就可以构建含有例如模板字符串{user.name}{product.price}

我尝试了这个:

'Hello {user.name}'.format( {'user': { 'name': 'Markus' } } )
KeyError: 'user'

'Hello {user.name}'.format( **{'user': { 'name': 'Markus' } } )
AttributeError: 'dict' object has no attribute 'name'

有办法吗?


问题答案:

dict不幸的是,默认情况下,Python对象不可访问属性(即,使用点符号)。因此,您可以辞职使用丑陋的括号符号:

'Hello {user[name]}'.format( **{'user': { 'name': 'Markus' } } )

或者,您可以将数据包装在点可访问的对象中。您可以从PyPI安装一些属性可访问的字典类,例如stuf

from stuf import stuf

'Hello {user.name}'.format( **stuf({'user': { 'name': 'Markus' } }) )

我倾向于将集合保存在stuf对象中,以便可以通过属性轻松访问它们。