使用元组的第二个元素作为列表对元组列表进行排序

时间:2014-12-10 12:45:49

标签: python list sorting tuples

我有一个元组列表

[("Alice", [1, 2, 1, 1, 1, 1]), ("Bob", [3, 1, 5, 3, 2, 5]), ("Clare", [2, 3, 2, 2, 4, 2]), ("Dennis", [5, 4, 4, 4, 3, 4]), ("Eva", [4, 5, 3, 5, 5, 3])]

我想要输出:

[("Alice", [1, 2, 1, 1, 1, 1]), ("Clare", [2, 3, 2, 2, 4, 2]), ("Bob", [3, 1, 5, 3, 2, 5]),("Dennis", [5, 4, 4, 4, 3, 4]), ("Eva", [4, 5, 3, 5, 5, 3])]

我想通过基于其中列表的总和对元组进行排序来实现这一点。

目前我有:

c = sorted(b, key=lambda x: (x[0], sum(x[1])))
 return c

非常感谢任何帮助

3 个答案:

答案 0 :(得分:6)

我认为密钥应该只是列表的总和,而不是元组,这意味着:

c = sorted(b, key=lambda x: sum(x[1]))

Read more about sorting.

答案 1 :(得分:0)

>>> lst=[("Alice", [1, 2, 1, 1, 1, 1]), ("Bob", [3, 1, 5, 3, 2, 5]), ("Clare", [2, 3, 2, 2, 4, 2]), ("Dennis", [5, 4, 4, 4, 3, 4]), ("Eva", [4, 5, 3, 5, 5, 3])]
>>> sorted(lst, key=lambda x:sum(x[1]))
[('Alice', [1, 2, 1, 1, 1, 1]), ('Clare', [2, 3, 2, 2, 4, 2]), ('Bob', [3, 1, 5, 3, 2, 5]), ('Dennis', [5, 4, 4, 4, 3, 4]), ('Eva', [4, 5, 3, 5, 5, 3])]

答案 2 :(得分:0)

如果您需要进行排序(使用排序结果更新列表):

 x = [("Alice", [1, 2, 1, 1, 1, 1]), ("Bob", [3, 1, 5, 3, 2, 5]), ("Clare", [2, 3, 2, 2, 4, 2]), ("Dennis", [5, 4, 4, 4, 3, 4]), ("Eva", [4, 5, 3, 5, 5, 3])]
 x.sort(key=lambda i: sum(i[1]))

如果你想要一个包含排序结果的新列表,你可以像@Reut Sharabani建议那样做。