带项目查找的字符串格式化参数引用

时间:2016-05-28 13:37:14

标签: python

是否可以使用格式字符串参数的值作为其他参数的键?

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

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

我希望a 2 12但是会​​引发KeyError: '{0}',因为文字字符串{0}用于查找,而不是a

查询可以在格式调用中完成,但是如果可以引用字符串中的其他位置参数,我就会完成。

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

1 个答案:

答案 0 :(得分:2)

不,根据PEP3101,您无法嵌套替换字段

  

格式说明符本身可以包含替换字段。对于   例如,字段宽度本身就是参数的字段可以是   指定通过:

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

这些“内部”替换字段只能以格式出现   替换字段的说明符部分。 内部替换字段   不能自己有格式说明符。 这也意味着   替换字段不能嵌套到任意级别。

您必须从格式字符串中移出该逻辑:

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

但是,在Python3.6(目前处于alpha版)中,有一些特殊的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'