Python dict不理解

时间:2012-08-30 15:04:29

标签: python dictionary

(抱歉,无法抗拒双关语!)

我想知道为什么翻译似乎不可能:

dict([(str(x),x) if x % 2 else (str(x),x*10) for x in range(10)])

使用dict comprehension进入这个更易读的表达式:

{str(x):x if x % 2 else str(x):x*10 for x in range(10)}

3 个答案:

答案 0 :(得分:8)

{ str(x):(x if x % 2 else x*10) for x in range(10) }

似乎运作良好

答案 1 :(得分:1)

设置优先级以使if .. else不适用于整个key:value对:它只是值的一部分。这意味着你想要:

{str(x): (x if x % 2 else x*10 for x in range(10))}

如果你想要一个不同的密钥计算,以及一个不同的值,在某些情况下,你必须这样做:

{(str(x) if x % 2 else repr(x)) : x if x % 2 else x * 10 }

这相当于:

dict([(str(x),x) if x % 2 else (repr(x),x*10) for x in range(10)])

或者确定一个显式循环比单行代码更易读,因为它非常复杂。

答案 2 :(得分:1)

看起来这只是一个问题或正确分组表达式:

# original
{str(x): (x if x % 2 else x*10) for x in range(10)}

# slightly more complex, allowing both key and value to have the ternary
{(str(x) if x % 3 else str(x+1)) : (x if x % 2 else x*10) for x in range(10)}