2016-04-13 9 views
-2

私はこれを持っている場合:私はdictを使用できますか?関数 "format"で?

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

好ましく文字列の機能「形式」を使用して、「D1」の対応する値とtemplに{}内の値を交換する最も簡単な方法は何ですか?

+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

FYI、現代のPythonでは、 'result = templ.format(** d1)'は['str.format_map'](https://docs.python.org/3/library/stdtypes.html#str)で行うことができます.format_map)は 'result = templ.format_map(d1)'を実行してマッピングプロトコルをサポートしている限り、任意の非 'dict'オブジェクトをサポートします。ある時点では、これは 'dict'サブクラスにも必要でしたが、少なくとも3.5ではそうではないようです(' '{a}、{b} '、format(** defaultdict(lambda:' foo ') ) '' foo、foo''を出力します。これは 'defaultdict'の状態が失われていないことを示しています)。 – ShadowRanger

関連する問題