我有这个列表结构:
[[[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]]
答案 0 :(得分:2)
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。