为什么这是SyntaxError?(Python,带内联if的词典理解)

为什么这是SyntaxError?(Python,带内联if的词典理解),python,Python,在字典中,我希望确保特定的键具有特定的编码 test_dictionary = { k:v.encode('latin-1') if k=="test_key" else k:v for k,v in test_dictionary.items() } 我得到SyntaxError。但我希望这是允许的。试试这个: test_dictionary = { k:v.encode('latin-1') if k=="test_key" else v for k,v in test_dictionar

在字典中,我希望确保特定的键具有特定的编码

test_dictionary = { k:v.encode('latin-1') if k=="test_key" else k:v for k,v in test_dictionary.items() }
我得到
SyntaxError
。但我希望这是允许的。

试试这个:

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() }
     ^___________________________________________^
请尝试以下方法:

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() }
     ^___________________________________________^

供参考:供参考:请注意,对于关键部分也可以使用if/else,但不能组合使用(因为
本身不是表达式的一部分)。如果您仍然希望根据条件指定完全不同的键值对,则可以使用“旧”语法:
dict((k,v)If条件else(v,k)表示d.iteritems()中的k,v)
明白了。我想如果没有括号,这个表达式就是模棱两可的,除非你事先知道它是如何解释的。谢谢。@oneloop:表达式不含糊,参数也不是必需的-我只是把它们放在那里让你更清楚。@mhawke它在某种意义上是含糊不清的,这是python核心开发人员关于这个特定习惯用法应该如何工作的特别决定。他们本可以按照我期望的方式来做,但没有注意到您也可以将if/else用于关键部分,只是不能组合使用(因为
本身不是表达式的一部分)。如果您仍然希望根据条件指定完全不同的键值对,则可以使用“旧”语法:
dict((k,v)If条件else(v,k)表示d.iteritems()中的k,v)
明白了。我想如果没有括号,这个表达式就是模棱两可的,除非你事先知道它是如何解释的。谢谢。@oneloop:表达式不含糊,参数也不是必需的-我只是把它们放在那里让你更清楚。@mhawke它在某种意义上是含糊不清的,这是python核心开发人员关于这个特定习惯用法应该如何工作的特别决定。他们本可以决定按照我期望的方式去做,但没有