(すみません、しゃれに抵抗できませんでした!)
なぜ翻訳できないように見えるのだろうか:
dict([(str(x),x) if x % 2 else (str(x),x*10) for x in range(10)])
辞書内包表記を使用して、このより読みやすい式に変換します。
{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 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)}