sya*_*yam 1 python list-comprehension dictionary-comprehension
我刚试过这样的列表理解
[i if i==0 else i+100for i in range(0,3)]
Run Code Online (Sandbox Code Playgroud)
它工作,但当我尝试类似的字典理解时,它会抛出一个错误:
d={3:3}
{d[i]:0 if i==3 else d[i]:True for i in range(0,4) }
Run Code Online (Sandbox Code Playgroud)
可能是什么原因?我怎样才能使用dict理解if else?
这会产生错误:
{d[i]:0 if i==3 else d[i]:True for i in range(0,4) }
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
注意:我在这里使用的示例只是一个随机的,而不是我的实际代码.我可以用替代解决方案来做到这一点,但我现在只是在研究dict理解.
您正在使用条件表达式.它只能在接受表达式的地方使用.
在字典理解中,键和值部分是单独的表达式,由:(因此:字符不是表达式的一部分)分隔.您可以在每个中使用条件表达式,但不能同时使用一个.
您只需要在值部分中使用它:
{d[i]: 0 if i == 3 else True for i in range(4)}
Run Code Online (Sandbox Code Playgroud)
然而,你会得到一个KeyError异常,因为d字典里没有0,1和2钥匙.
请参阅表达式参考文档的Dictionary显示部分:
Run Code Online (Sandbox Code Playgroud)dict_display ::= “{” [key_datum_list | dict_comprehension] “}” [...] dict_comprehension ::= expression “:” expression comp_for[...]
与list和set comprehensions相反,dict理解需要两个用冒号分隔的表达式,后跟通常的"for"和"if"子句.
字典理解if-else问题的另一种解决方案:
dict((x, x ** 2) if x > 0 else (x, -x ** 2) for x in range(-4, 5))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1576 次 |
| 最近记录: |