簡體   English   中英

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

[英]How to use a dot in Python format strings?

我想格式化一個字符串並能夠使用點運算符,這樣我就可以構造包含例如{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'

有辦法嗎?

遺憾的是,Python dict對象默認情況下不是屬性可訪問的(即使用點表示法)。 所以你可以讓自己屈服於更丑陋的括號表示法:

'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'

或者,將實際具有該屬性的對象放在字典中,例如自定義類或collections.namedtuple

>>> 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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM