我是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是多么困惑。
谢谢,
答案 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”的键。