2016-08-14 13 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 comprehension syntax](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を使うことができます( ':'自体は式の一部ではないので)。条件に基づいて完全に異なるキー値のペアを指定したい場合は、「古い」構文を使用できます:dictiter(k、v)の条件else(v、k) )) ' –

+0

入手しました。私はあなたのかっこがなければ、あらかじめそれがどう解釈されているかを知っていない限り、表現があいまいであると思います。ありがとうございました。 – oneloop

+0

@oneloop:表現はあいまいではなく、括弧は必要ありません - 私はあなたにそれを明確にするためにそこに置きます。 – mhawke