2017-02-28 66 views
1

我是新来的Python,只是阅读下面的部分用Python文档6.1.3. Format String Syntax什么是有效的密钥根据Python的str.format()文档

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 “键1”]}?密钥'key1'是一个字符串,但如果使用“key1”,这是一个错误。一个正常的字典索引应该是字典['key1'],而不是 字典[key1]

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

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

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

所以我很困惑什么有效的index_string在格式字符串中。

谢谢,

+1

我发现这是一个有价值的资源:https://pyformat.info/#getitem_and_getattr – LJGibbs

+0

«显式优于隐式»我一直提取格式化字符串之外的任何值,除非它明显死亡。 – 9000

回答

0

我想我知道更多的答案后阅读和思考。感谢@decimus phostle那post其中提到了PEP。还有的是,终于回答我的问题几乎相同的语句:

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. 

不同的是,它说:没有arg_name在PEP。所以“不用引号分隔”是指引号是一个键中的普通字符。例如,

{0["1"]} 

在这种置换领域,关键是三个字符:双引号,1,和双引号,不是一个字符1.所以,很显然有在字典中没有这样的三字符键。同样对于PEP来说,它有简单的规则来寻找关键字:如果它以一个数字开头,那么它是一个数字;否则它是一个字符串。这意味着如果你的字典有一个字符串键,但是由数字字符组成,例如'10',那么你不能在替换字段中指定键。因为如果在替换字段中使用10,则认为是10;如果使用'10',则认为它是由四个字符组成的字符串,而不是由两个字符'1'和'0'组成的字符串。

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

{0[':-]']} 

引号不会使内]引用(文字)。因此它成为[,它会过早终止索引的匹配]。

这里是替换现场有效的密钥进行比较:

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

使用类似“10”作为替代场关键,你需要确保该字典有一个名为键“” 10' ”。

相关问题