如果我有這樣的:我可以使用字典嗎?用「格式」功能?
>>> templ = "{aa} fd3443fds {bb} 543gfdgf {cc}"
>>> d1 = {"aa": "this is aa", "bb": "this is bb33", "cc": "this is cc5222"}
是什麼在templ
與「D1」對應的值替換值{},最好使用功能「格式」字符串的最簡單的方法?
如果我有這樣的:我可以使用字典嗎?用「格式」功能?
>>> templ = "{aa} fd3443fds {bb} 543gfdgf {cc}"
>>> d1 = {"aa": "this is aa", "bb": "this is bb33", "cc": "this is cc5222"}
是什麼在templ
與「D1」對應的值替換值{},最好使用功能「格式」字符串的最簡單的方法?
如果你有一個模板字符串templ
和字典d1
,你可以在模板變量填補正是如此:
result = templ.format(**d1)
如果你有一個屬性d1.aa
,d1.bb
等對象d1
:
class Class1: pass
d1 = Class1()
d1.aa = d1.bb = d1.cc = 'hello'
然後你可以重寫你的模板字符串:
templ = "{0.aa} fd3443fds {0.bb} 543gfdgf {0.cc}"
result = templ.format(d1)
或者您可以使用vars(d1)
:
templ = "{aa} fd3443fds {bb} 543gfdgf {cc}"
result = templ.format(**vars(d1))
我該怎麼做一個實例的屬性?換句話說,如果d1是某個Class1的實例並且它具有屬性「aa」,「bb」和「cc」。按原樣傳遞它會引發異常。 – Joota
@Joota - 嘗試使用'.format(** vars(d1))'。看到我最近的編輯。 –
僅供參考,在現代Python中,'result = templ.format(** d1)'可以通過['str.format_map']完成(https://docs.python.org/3/library/stdtypes.html#str .format_map)來支持任意非'dict'對象,只要它們通過執行'result = templ.format_map(d1)'來支持映射協議。有一點,對於'dict'子類來說,這也是必要的,但是至少在3.5中看起來並非如此(''{a},{b}',format(** defaultdict(lambda:'foo')) )'產生''foo,foo''而不是出錯,表示'defaultdict'狀態不會丟失。 – ShadowRanger
Joota,你的意思'String'或'str'?我不知道'String'是什麼。 –
@Robᵩ,str ..... – Joota