我有一个 2d 字典,其中我的数据如下所示:
k1,k2, value
1,2,0.8
1,3,0.7
1,5,0.9
2,1,0.8
and so on
所以可以说我在二维字典中有这些数据..
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中实现上述目标
我有一个 2d 字典,其中我的数据如下所示:
k1,k2, value
1,2,0.8
1,3,0.7
1,5,0.9
2,1,0.8
and so on
所以可以说我在二维字典中有这些数据..
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中实现上述目标
k2
这对 each 进行反向排序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
指定一个从每个值生成排序键的函数。有关详细信息,请参阅排序方法。
(lambda
上面给出的函数仅适用于 Python 2.x。在 3.x 中,您可以使用lambda kv: kv[1]
。或者您可以只使用operator.itemgetter(1)
。)
items
您可以通过调用其方法从任何映射中获取一系列键值对。在 Python 3.x 中,这为您提供了一个很好的高效视图;在 2.x 中,它将对复制到list
.
最后,请记住 adict
没有固有的顺序。
dict 的要点是它是无序的。如果你想从你的字典中创建一个新的值列表,并对这些值进行排序,那是另一回事。但是你不会得到一个已经排序的字典(除非你让自己成为一个排序的字典,这实际上并不难)。