2016-05-28 5 views
3

書式文字列引数の値を他の引数のキーとして使用できますか?私はしかし、KeyError: '{0}'が文字列リテラル{0}としてスローされるa 2 12期待項目検索による文字列書式引数の参照

mins = {'a': 2, 'b': 4, 'c': 3} 
maxs = {'a': 12, 'b': 7, 'c': 21} 

'{0} {1[{0}]} {2[{0}]}'.format('a', mins, maxs) 

は、ルックアップに使用していないaれます。

フォーマットの呼び出しでルックアップを実行することはできますが、文字列内の他の位置指定引数を参照することが可能な場合は、直後です。

key = 'a' 
'{} {} {}'.format(key, mins[key], maxs[key]) 

答えて

2

いいえ、PEP3101によると、あなたネスト交換フィールドすることはできません。

書式指定子自体は交換用のフィールドを含めることができます。 例えば、そのフィールド幅フィールドは、パラメータが を介して指定することができ、それ自体である:

"{0:{1}}".format(a, b) 

これらの「内部」の置換フィールドは唯一の置換フィールドのフォーマット 指定部で起こり得ます。 内部置換フィールド は、フォーマット指定子を持つことはできません。これは、 の置換フィールドを任意のレベルにネストすることもできないことを意味します。

あなたはフォーマット文字列のうちから、そのロジックを移動する必要があります:

>>> '{0} {1} {2}'.format('a', mins['a'], maxs['a']) 
'a 2 12' 

しかし、(現在はアルファで)Python3.6解決するために役立つだろう、特別なformat stringsがあるにそれはこうです:

>>> key = "a" 
>>> mins = {'a': 2, 'b': 4, 'c': 3} 
>>> maxs = {'a': 12, 'b': 7, 'c': 21} 
>>> f'{key} {mins[key]} {maxs[key]}' 
'a 2 12' 
関連する問題