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

2024-05-29 04:50:24 发布

您现在位置: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'

有办法吗?


Tags: 字符串name模板formathelloobject运算符product
2条回答

Pythondict对象在默认情况下不可访问属性(即使用点表示法)。所以你要么听命于更难看的括号符号:

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

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

from stuf import stuf

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

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

最小的更改是在模板中使用方括号,而不是句点:

              # v Note
>>> 'Hello {user[name]}'.format(**{'user': {'name': 'Markus'}})
'Hello Markus'

或者,将实际具有该属性的对象放入字典中,例如自定义类或^{}

>>> class User(object):
    def __init__(self, name):
        self.name = name


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

还要注意,如果要写出文字,则只需使用关键字参数:

>>> 'Hello {user.name}'.format(user=User('Markus'))
'Hello Markus'

相关问题 更多 >

    热门问题