根据Python str.format()文档,什么是有效的键

时间:2017-02-28 17:16:26

标签: python string dictionary

我是Python的新手,只需阅读Python doc 6.1.3. Format String Syntax中的以下部分:

Because arg_name is not quote-delimited, it is not possible to specify arbitrary dictionary keys (e.g., the strings '10' or ':-]') within a format string.

这是什么意思?有人可以给我任何例子吗?这是否意味着格式字符串中的所有数字都是位置参数?所以'10'是第10个参数?对于': - ]',这是因为它有']'吗?

我也见过post

另一个问题来自帖子:

dictionary = {'key1': 'val1', '1': 'val2'}

string1 = 'Interpolating {0[key1]}'.format(dictionary)
print string1

为什么它不是{0 [“key1”]}?键'key1'是一个字符串,但如果使用“key1”,这是一个错误。普通的dict索引应该是字典['key1'],而不是 字典[KEY1]

就像@BrenBarn在该帖子中回复一样,如果使用数字1作为字典中的键,它可以工作。

dictionary = {'key1': 'val1', 1: 'val2'}

string2 = 'Interpolating {0[1]}'.format(dictionary)
print string2

所以我对格式字符串中有效的index_string是多么困惑。

谢谢,

1 个答案:

答案 0 :(得分:0)

我想在阅读和思考之后我知道了答案。感谢post提到PEP的@decimus phostle。有一个几乎相同的陈述终于回答了我的问题:

Because **keys** are not quote-delimited, it is not possible to
specify arbitrary dictionary keys (e.g., the strings "10" or
":-]") from within a format string.

不同之处在于它在PEP中说而不是 arg_name 。所以“not quote-delimited”意味着引号是键中的普通字符。例如,

{0["1"]}

在这个替换字段中,键是三个字符:双引号,1和双引号,而不是一个字符1.所以很明显字典中没有这样的三字符键。

同样符合PEP,找到密钥有一个简单的规则:如果它以数字开头,那么它就是一个数字;否则它是一个字符串。这意味着如果您的字典具有字符串键,但由数字字符组成,例如“10”,则无法在替换字段中指定键。因为如果你在替换字段中使用10,则认为是10;如果使用“10”,则将其视为四个字符的字符串,而不是两个字符“1”和“0”的字符串。

对于': - ]'作为关键,为什么不可能?因为引号不是分隔符,

{0[':-]']}

引号不会使内部引用(文字)。所以它成为[的匹配],它过早地终止了索引。

以下是要比较的替换字段中的有效密钥:

dd = {"'10'":'a'}    
print("{0['10']}".format(dd))

要在替换字段中使用类似“10”的键作为键,您需要确保字典中有一个名为“'10”的键。