根据值反向排序2d字典

时间:2013-04-19 19:12:07

标签: python

我有一个二维字典,我的数据如下:

k1,k2, value
 1,2,0.8
 1,3,0.7
 1,5,0.9
 2,1,0.8

  and so on

所以我想说我在2d dict中有这个数据..

d[1][2] --> gives 0.8

我想要的是根据值

反转每个k1的排序k2

所以对于上述..我希望在此操作之后得到的是:

1,5,0.9
1,2,0.8
1,3,0.7
2,1,0.8

依旧......

我如何在python

中实现上述目标

2 个答案:

答案 0 :(得分:2)

对每个k2 k1进行反向排序,这是您的问题所要求的:

for k1, subdict in maindict.items():
    for k2, value in sorted(subdict.items(), reverse=True):
        print(k1, k2, value)

如果您还想对k1进行转发排序:

for k1, subdict in sorted(maindict.items()):
    for k2, value in sorted(subdict.items(), reverse=True):
        print(k1, k2, value)

如果您想对value而不是k2进行反向排序(正如您的标题所要求的那样):

for k1, subdict in maindict.items():
    for k2, value in sorted(subdict.items(), key=lambda (k, v): v, reverse=True):
        print(k1, k2, value)

一些解释:

您可以在任何序列上调用sorted以获取其排序版本。您可以将reverse=True传递给几乎任何与排序相关的函数以反向排序,并key指定一个从每个值生成排序键的函数。有关详细信息,请参阅Sorting HOW TO

(上面给出的lambda函数仅适用于Python 2.x.在3.x中,您可以使用lambda kv: kv[1]。或者您可以使用operator.itemgetter(1)。)

您可以通过调用items方法从任何映射中获取一系列键值对。在Python 3.x中,这为您提供了一个很好的高效视图;在2.x中,它将对复制到list

最后,请记住,dict没有固有的顺序。

答案 1 :(得分:1)

dict的意思是它是无序的。如果你想从你的dict创建一个新的值列表,并将这些值排序,那就是另一回事了。但是你不会得到一个已经排序的字典(除非你自己制作一个排序的字典,实际上并不那么难)。