在Python字典中按值(降序)和键(升序)排序

6
我有以下字典:
mydict1 = {1: 11, 2: 4, 5: 1, 6: 1}
mydict2 = {1: 1, 5: 1}

对于每个元素,我希望首先按值(降序)排序,然后按键(升序)排序,产生如下输出:

out_dict1 = [((1, 11), (2, 4), (5, 1), (6, 1)]
out_dict2 = [(1, 1), (5, 1)]

怎么做?

我尝试了这个方法,但对于上面的两种情况不能得到一致的结果:

sorted(mydict.items(), key=lambda x: (x[1],x[0]))

所有的键和值都保证是数字吗?如果是这样,那么@thefoureye的解决方案是最简单的。如果不是,你需要一点额外的处理...幸运的是,Python确保其排序是稳定的,因此可以实现。 - Alex Martelli
1个回答

11

由于您想按降序对值进行排序,只需对传递给key参数的函数中的值取反,像这样:

由于你要按照降序来排列值,在传递给key参数的函数中,只需要对值取反,就像这样:

sorted(mydict.items(), key=lambda x: (-x[1], x[0]))

现在,这些值将会按照降序进行排序。如果两个值相等,将会考虑它们的键并按照升序排序。


就是我一直在寻找的东西。今天我发现了lambda,它们太酷了。 - StackPointer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接