我有一个这样的列表:
[('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)
答案 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
及其使用方法的良好示例。
答案 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')]