(对不起,无法抗拒双关语!)
我想知道为什么似乎无法翻译:
dict([(str(x),x) if x % 2 else (str(x),x*10) for x in range(10)])
使用dict理解进入这个更易读的表达式:
{str(x):x if x % 2 else str(x):x*10 for x in range(10)}
(对不起,无法抗拒双关语!)
我想知道为什么似乎无法翻译:
dict([(str(x),x) if x % 2 else (str(x),x*10) for x in range(10)])
使用dict理解进入这个更易读的表达式:
{str(x):x if x % 2 else str(x):x*10 for x in range(10)}
{ str(x):(x if x % 2 else x*10) for x in range(10) }
似乎运作良好
设置了优先级,因此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)])
或者决定对于如此复杂的事情,显式循环比单行代码更具可读性。
看起来这只是一个问题或正确分组表达式:
# 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)}