2016-04-13 31 views
-2

如果我有這樣的:我可以使用字典嗎?用「格式」功能?

>>> templ = "{aa} fd3443fds {bb} 543gfdgf {cc}" 
>>> d1 = {"aa": "this is aa", "bb": "this is bb33", "cc": "this is cc5222"} 

是什麼在templ與「D1」對應的值替換值{},最好使用功能「格式」字符串的最簡單的方法?

+1

Joota,你的意思'String'或'str'?我不知道'String'是什麼。 –

+0

@Robᵩ,str ..... – Joota

回答

1

如果你有一個模板字符串templ和字典d1,你可以在模板變量填補正是如此:

result = templ.format(**d1) 

如果你有一個屬性d1.aad1.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)) 
+0

我該怎麼做一個實例的屬性?換句話說,如果d1是某個Class1的實例並且它具有屬性「aa」,「bb」和「cc」。按原樣傳遞它會引發異常。 – Joota

+0

@Joota - 嘗試使用'.format(** vars(d1))'。看到我最近的編輯。 –

+0

僅供參考,在現代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

相關問題