2016-08-14 43 views
0

在字典中,我想確保特定的鍵具有特定的編碼。爲什麼是這個SyntaxError? (Python,帶內聯if的詞典理解)

test_dictionary = { k:v.encode('latin-1') if k=="test_key" else k:v for k,v in test_dictionary.items() } 

我得到SyntaxError。我預計這將被允許。

+0

作爲參考:[條件表達式語法](HTTPS:/ /docs.python.org/3/reference/expressions.html#conditional-expressions)和[Dict理解語法](https://docs.python.org/3/reference/expressions.html#dictionary-displays) – unutbu

回答

3

嘗試此代替:

test_dictionary = { k:v.encode('latin-1') if k=="test_key" else v for k,v in test_dictionary.items() } 

第二:已被除去,從而內嵌if任一編碼v,或離開它,因爲它是取決於條件。

爲了澄清我已經添加括號下面的表達,使之更清楚,這是列表解析的「價值」的部分:

{ k: (v.encode('latin-1') if k=="test_key" else v) for k,v in test_dictionary.items() } 
    ^___________________________________________^ 
+1

注意你可以使用if/else作爲關鍵部分,但不能組合使用(因爲':'本身不是表達式的一部分)。如果你仍然想根據條件指定完全不同的鍵值對,你可以使用「old」語法:'dict((k,v))如果條件else(v,k)爲k,v在d.iteritems ))' –

+0

明白了。我想如果沒有你的括號,表達式就不明確,除非事先知道它是如何解釋的。謝謝。 – oneloop

+0

@oneloop:表達不含糊不清,並且不需要parens - 我只是把它們放在那裏讓它更加清晰。 – mhawke