2014-09-27 94 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()