如何通过第二个元组元素对元组列表进行排序?

时间:2020-07-08 10:14:28

标签: python list sorting

我有一个这样的列表:

[('TIPE_ORG', 'Corea'), ('TIPE_ORG', 'United Kingdom'), ('TIPE_ORG', 'Russia'), ('TIPE_ORG', 'Germany'),('TIPE_PER', 'Pepe Martínez')]

我希望按文本长度从第二个参数的最大到最小排序 像这样:

[('TIPE_ORG', 'United Kingdom'),('TIPE_PER', 'Pepe Martínez'), ('TIPE_ORG', 'Germany'), ('TIPE_ORG', 'Russia'),('TIPE_ORG', 'Corea')]

我尝试执行此操作,但是具有两个参数不会为第二个命令排序,而是为第一个TIPE_ORG排序:

x.sort(key=len, reverse=True)

2 个答案:

答案 0 :(得分:2)

这可以通过使用sort方法就地排序或使用sorted方法排序并返回新的排序列表来完成。对于equality的决定,我们使用lambda函数。见下文:

my_list=[('TIPE_ORG', 'Corea'), ('TIPE_ORG', 'United Kingdom'),('TIPE_PER', 'Pepe Martínez')]

my_new_list = sorted(my_list, key=lambda this_tup:len(this_tup[1]), reverse=True)

sort(my_list, key=lambda this_tup:len(this_tup[1]), reverse=True)

您可以参考此链接,他们提供了有关lambda expressions及其使用方法的良好示例。

lambda

答案 1 :(得分:2)

您可以将sorted方法与lambda函数一起使用,如下所示。

lst=[('TIPE_ORG', 'Corea'), ('TIPE_ORG', 'United Kingdom'), ('TIPE_ORG', 'Russia'), ('TIPE_ORG', 'Germany'),('TIPE_PER', 'Pepe Martínez')]

sorted(lst,key=lambda key:len((key[1])),reverse=True)

输出将为

[('TIPE_ORG', 'United Kingdom'),
('TIPE_PER', 'Pepe Martínez'),
('TIPE_ORG', 'Germany'),
('TIPE_ORG', 'Russia'),
('TIPE_ORG', 'Corea')]