2016-04-13 27 views
-2

Bunu varsa:Bir dict kullanabilir miyim? bir işlev "biçimi" ile?

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

tercihen dize işlevi "biçimini" seçeneğini kullanarak, "d1" karşılık gelen değerlerle templ yılında {} değerleri değiştirmek için en kolay yolu nedir? Eğer bir şablon dizesi templ ve bir sözlük d1 varsa

+1

Joota, sen 'String' veya' str' demek? Ben bir String'in ne olduğunu bilmiyorum. –

+0

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

cevap

1

, sen thusly şablon değişkenleri doldurabilirsiniz:

result = templ.format(**d1) 

özelliklerdeki d1.aa, d1.bb, vs ile bir nesne d1 varsa:

class Class1: pass 
d1 = Class1() 
d1.aa = d1.bb = d1.cc = 'hello' 

şablon dizginizi yeniden yazabilirsiniz:

templ = "{0.aa} fd3443fds {0.bb} 543gfdgf {0.cc}" 
result = templ.format(d1) 

veya vars(d1) kullanmak mümkün olabilir:

templ = "{aa} fd3443fds {bb} 543gfdgf {cc}" 
result = templ.format(**vars(d1)) 
+0

Bir örneğin öznitelikleri için bunu nasıl yapabilirim? Başka bir deyişle, eğer d1 bir Sınıf1'in bir örneğidir ve "aa", "bb" ve "cc" özniteliklerine sahiptir. Olarak geçmek-bir istisna atar. – Joota

+0

@Joota - '.format (** vars (d1))' kullanmayı deneyin. Son düzenlememe bakın. –

+0

FYI, modern Python'da 'result = templ.format (** d1)' [str.format_map'] ile yapılabilir (https://docs.python.org/3/library/stdtypes.html#str .format_map) "sonuç = templ.format_map (d1)" ifadesini kullanarak eşleme protokolünü destekledikleri sürece keyfi olmayan karakterleri desteklemez. Bir noktada, bu aynı zamanda 'dict' alt sınıfları için de gerekliydi, ama en azından 3.5'de olduğu gibi görünmüyor ('' {a}, {b} ', format (** defaultdict (lambda:' foo ')) '' foo, foo '' yerine hatalar üreterek 'defaultdict' statüsünün kaybolmadığını gösterir. – ShadowRanger

İlgili konular