如何在格式字符串语法中引用空字符串键?

时间:2015-05-11 16:18:16

标签: python string-formatting

空字符串('')是字典的有效密钥,但我无法使用Format String Syntax

引用它
data = { 'a' : 'hello' , '' : 'bye' }
print '{a:<14s}'.format(**data)
print '{:<14s}'.format(**data)

哪个输出:

hello         
Traceback (most recent call last):
  File "xxx.py", line 3, in <module>
    print '{:<14s}'.format(**data)
IndexError: tuple index out of range

有没有办法引用那个键...作为字典键!我无法将数据转换为元组;一点背景:我正在做一些基于通用格式规范的自动格式化,它使用dicts作为格式化数据转换为Format String Syntax。也就是说,我不能这样做:

print '{0:<14s}'.format(data[''])

必须始终将数据传递给**data格式(基本上,因为我在格式化程序类中执行通用.format(**data)

1 个答案:

答案 0 :(得分:4)

您不能使用空字符串。格式严格限制有效Python标识符的键,这意味着它们必须在开头至少有一个字母或下划线。

来自Format String Syntax documentation的语法:

replacement_field ::=  "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*
arg_name          ::=  [identifier | integer]

因此field_name可以是整数,也可以是valid Python identifier

请注意,空字符串不是唯一无效的标识符;你不能使用带空格的字符串,也不能使用以数字开头的字符串。这样的字符串可以在字典中使用,不是作为Python代码中的关键字参数,也不是字符串格式的字段名称。