(對不起,無法抗拒的雙關語!)Python的字典不解
我不知道爲什麼它似乎無法翻譯:
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)}
(對不起,無法抗拒的雙關語!)Python的字典不解
我不知道爲什麼它似乎無法翻譯:
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) }
似乎運作良好
我的建議'{str(x):(x如果x%2 else x * 10)for x in range(10)}' - 更可讀的 –
@AlexeyKachayev:[本網站是協作編輯](http://stackoverflow.com/faq),你不知道嗎?如果你有一個有用的建議,只需編輯帖子! – georg
請注意,詞典理解僅適用於v2.7 + –
設置優先級以便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)}
作爲一個側面說明,第一個可以寫成:'字典((STR(X),X,如果我%2否則x * 10)對於範圍(10)中的x)'與thg435的解決方案對稱。 (我也將list-comp改成了一個生成器,因爲......爲什麼不呢?) – mgilson