2017-06-14 58 views
1

我有一個小程序,工作得很好。我試圖強迫自己審查\分析我的代碼,以試圖讓我的代碼(和我自己)更好一點。轉換爲字典理解

我在想,如果這個代碼小部分:

temp2 = {} 
for key in sorted(temp1.keys()): 
    temp2[key] = temp1[key] 

不能改寫爲字典理解。

由於我的經驗不足,我無法'將' '轉換成理解。

所有循環所做的是取字典temp1,對其進行排序並將新排序的key:value對放入temp2

正如我上面所說,整個事情的工作原理,但我想學習 找到模式,我可以改善。

回答

2

直接翻譯這字典的理解很簡單:

temp2 = {key: value for key, value in sorted(temp1.items())} 

如果你不想使用value作爲決勝如果密鑰是相同的,你也可以提供一個key所以你」重新只是基於key排序:

即使字典是「有序」在python-3.6並不意味着你應該依賴於它(orderedness正式只是一個副作用!)。最好使用OrderedDict,並在安全方面:

from collections import OrderedDict 
temp2 = OrderedDict([(key, value) for key, value in sorted(temp1.items(), key=lambda x: x[0])]) 
+0

因爲你的第二個答案的工作完美我想知道什麼(涉及OrderedDict)第三個選項帶來的表。何時選項#3是更合適的選擇?謝謝。 – MarkS

+0

@MarkS啊,這有點複雜。字典本身是**無序的**,所以根據定義,對字典進行排序註定會失敗。但是現在開始使用3.6個字典**命令**,但正式的這只是一個「實現細節」,可以隨時改變。所以如果你希望它能夠與不同的Python版本一起工作,或者想要「安全地玩」,你絕對必須使用OrderedDict。我大部分都添加了它,因爲如果你需要訂購''OrictDict'',那麼它仍然是最好的做法。 :) – MSeifert