2014-09-27 83 views
-2

如何排序嵌套字典中的值,結果也應該是字典格式?如何排序Python中的字典字典

對於例如:

{ 1: {2: 3.4 ,3: 4.5, 4:1.2}, 
    2: {3: 35.6 ,4: 6.7, 5:2}, 
    3: {4:45, 6:75} 
    } 

如何在該嵌套的字典的值進行排序以獲得結果(排序反向)像: {1:{3:4.5; 2:3.4,4:1.2 }, 2:{3:35.6,4:6.7,5:2}, 3:{6:75,4:45}}

+0

字典永遠不可排序。數組可排序。 – Paul 2014-09-27 05:40:39

+0

即使我使用字典的列表,我仍然需要對tat字典中的值進行排序嗎?我很困惑如何做到這一點?!! – 2014-09-27 05:55:05

回答

0

你所想實際上是不可能的。

如果寫入字典,然後再讀取,則讀取順序不必與寫入順序相匹配。

這可以直接在Python命令解釋器來證明:

在這裏我們將寫入上述D指定的答案...

>>> d = { 1: {3:4.5, 2:3.4, 4:1.2}, 2: {3: 35.6 ,4: 6.7, 5:2}, 3: {6:75, 4:45} } 

但是,如果我們提出要求的時候,我們得到的東西不同....這就是類型字典的工作原理。

>>> d 
{1: {2: 3.4, 3: 4.5, 4: 1.2}, 2: {3: 35.6, 4: 6.7, 5: 2}, 3: {4: 45, 6: 75}} 

課:如果你想有一個數據結構,它是排序或記得有一個排序順序,使用陣列列表,或@JesseMu建議,一個OrderedDict

這裏我將展示如何解決數組的排序問題。

相反,假設輸入數據是對數組的數組,像這樣:

d = [ [(2, 3.4), (3, 4.5), (4, 1.2)],\ 
     [(3, 35.6), (4, 6.7), (5, 2)],\ 
     [(4, 45), (6,75) ]\ 
    ] 

然後,你需要做的是逆向排序每個陣列由第二字段的值(這是場1,因爲第一個字段是字段0),並且看起來像這樣:

d_sorted = [sorted(a, key=lambda p: -p[1]) for a in d] 

d_sorted 
[[(3, 4.5), (2, 3.4), (4, 1.2)], [(3, 35.6), (4, 6.7), (5, 2)], [(6, 75), (4, 45)]] 
+0

或'OrderedDict'。 – jayelm 2014-09-27 05:52:29

0

使用OrderedDict

實施例:

from collections import OrderedDict 

d = OrderedDict()