我有一个二维字典,我的数据如下:
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
中实现上述目标答案 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创建一个新的值列表,并将这些值排序,那就是另一回事了。但是你不会得到一个已经排序的字典(除非你自己制作一个排序的字典,实际上并不那么难)。