2017-02-28 55 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' 」。

相關問題