python按值列表排序元组列表

时间:2017-11-12 16:55:06

标签: python list sorting tuples

我有以下带有元组列表的列表:

[[('Armin', 1.0), ('Doris', 0.2240092377397959)], [('Benjamin', 1.0), ('Doris', 0.3090169943749474)], [('Caroline', 1.0), ('Benjamin', 0.2612038749637414)], [('Doris', 1.0), ('Benjamin', 0.3090169943749474)], [('Ernst', 1.0), ('Benjamin', 0.28989794855663564)]]

这是列表中的元组列表。我想按每个列表中第二个元组的值对其进行排序。例如 - 我想得到orderedList的结果:

[[('Benjamin', 1.0), ('Doris', 0.3090169943749474)],[('Doris', 1.0), ('Benjamin', 0.3090169943749474)],[('Ernst', 1.0), ('Benjamin', 0.28989794855663564)],[('Caroline', 1.0), ('Benjamin', 0.2612038749637414)],[('Armin', 1.0), ('Doris', 0.2240092377397959)]]

我无法使用sorted和lambda来管理它。

你能告诉我怎么做吗?

3 个答案:

答案 0 :(得分:1)

这应该这样做:

l = [[('Armin', 1.0), ('Doris', 0.2240092377397959)], [('Benjamin', 1.0), ('Doris', 0.3090169943749474)], [('Caroline', 1.0), ('Benjamin', 0.2612038749637414)], [('Doris', 1.0), ('Benjamin', 0.3090169943749474)], [('Ernst', 1.0), ('Benjamin', 0.28989794855663564)]]

sorted(l, key=lambda x: x[1][1], reverse=True)

<强>解释: 在sorted中传递key参数允许您通过指定的键对对象进行排序。在这种情况下,我们要排序的键是列表第二项中的第二个值。传递reverse=True参数按降序对列表进行排序。

答案 1 :(得分:0)

我想你想要这个。按第二个值对每个子列表进行排序,然后按照子列表中第二个值的数量对顶级列表进行排序。

sorted([sorted(e, key=lambda x: x[-1], reverse=True) for e in x], 
       key=lambda x: x[-1][-1], reverse=True)

# returns:
[[('Benjamin', 1.0), ('Doris', 0.3090169943749474)],
 [('Doris', 1.0), ('Benjamin', 0.3090169943749474)],
 [('Ernst', 1.0), ('Benjamin', 0.28989794855663564)],
 [('Caroline', 1.0), ('Benjamin', 0.2612038749637414)],
 [('Armin', 1.0), ('Doris', 0.2240092377397959)]]

答案 2 :(得分:0)

你可以试试这个:

s= [[('Armin', 1.0), ('Doris', 0.2240092377397959)], [('Benjamin', 1.0), ('Doris', 0.3090169943749474)], [('Caroline', 1.0), ('Benjamin', 0.2612038749637414)], [('Doris', 1.0), ('Benjamin', 0.3090169943749474)], [('Ernst', 1.0), ('Benjamin', 0.28989794855663564)]]
final_s = [[(a, b) for a, b in zip([c for c, d in i], [d for c, d in i][::-1])][::-1] for i in sorted(s, key=lambda x:x[-1][-1])[::-1]]

输出:

[[('Benjamin', 1.0), ('Doris', 0.3090169943749474)], [('Doris', 1.0), ('Benjamin', 0.3090169943749474)], [('Benjamin', 1.0), ('Ernst', 0.28989794855663564)], [('Benjamin', 1.0), ('Caroline', 0.2612038749637414)], [('Doris', 1.0), ('Armin', 0.2240092377397959)]]
相关问题