[英]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.