排序python中的列表列表

时间:2017-11-02 13:21:30

标签: python-2.7

我有这个列表结构:

[[[6], [4], 1.0], [[5, 6], [4], 1.0], [[5], [6], 1.0], [[5], [4, 6], 1.0], [[5], [4], 1.0], [[4, 5], [6], 1.0], [[4], [6], 0.8]]

我想通过第3个元素(降序)和第一个和第二个列表的长度(首先是较小的列表)对它进行排序。我尝试使用

r = sorted(r, key=itemgetter(2, 0, 1), reverse=True)

按降序对第3个元素进行排序,但如何将其他排序限制添加到此元素中呢?

预期产出:

[[[6], [4], 1.0], [[5], [6], 1.0], [[5], [6], 1.0], [[5], [4], 1.0], [[5], [4, 6], 1.0], [[5, 6], [4], 1.0], [[4, 5], [6], 1.0], [[4], [6], 0.8]]

2 个答案:

答案 0 :(得分:2)

使用lambda expression

r = sorted(r, key=lambda x:(x[2], -len(x[0]), -len(x[1])), reverse=True)

或无需重新分配的排序:

r.sort(key=lambda x:(x[2], -len(x[0]), -len(x[1])), reverse=True)

答案 1 :(得分:0)

我不相信你可以在一行中做到这一点,你需要在这样的阶段做,主键是最后一个:

inherit-binding-context

这给出了正确的结果:

a = [[[6], [4], 1.0], [[5, 6], [4], 1.0], [[5], [6], 1.0], [[5], [4, 6], 1.0], [[5], [4], 1.0], [[4, 5], [6], 1.0], [[4], [6], 0.8]] b = sorted(a, key=lambda x : len(x[1]), reverse=False) c = sorted(b, key=lambda x : len(x[0]), reverse=False) d = sorted(c, key=itemgetter(2), reverse=True)

有关详细信息,请参阅docs