基于Python中给定字符串对列表进行排序

时间:2016-01-05 21:21:03

标签: python list sorting

我有一个列表如下:

list_of_lists = [
   ('test_ss', 'Test 1'),
   ('test_2_ss', 'Test 2'),
   ('test_3_ss', 'Test 3'),
   ('test_ss', 'Test 4')
]

我需要根据给定的变量字符串,按每个列表中的第一项对这个列表列表进行排序。

举个例子,我想按' test_ss'排序。得到的列表列表将是:

sorted_list_of_lists = [
   ('test_ss', 'Test 1'),
   ('test_ss', 'Test 4'),
   ('test_2_ss', 'Test 2'),
   ('test_3_ss', 'Test 3'),
]

我已经尝试了一些关于SO和其他人的例子(Sorting a list of lists based on a list of stringsSorting lists based on a particular element - Pythonsorting multiple lists based on a single list in python等)但是没有找到正确的方法(或者我没有正确地遵循这些例子。

任何指针?

3 个答案:

答案 0 :(得分:2)

您可以使用这样的简单键功能:

In [59]: def compare(element):
   ....:     return element[0] == 'test_ss' or 99999
   ....: 

In [60]: sorted(list_of_lists, key=compare)
Out[60]: 
[('test_ss', 'Test 1'),
 ('test_ss', 'Test 4'),
 ('test_2_ss', 'Test 2'),
 ('test_3_ss', 'Test 3')]

答案 1 :(得分:1)

如果要分区,只需返回False字符串匹配:

>>> sorted(list_of_lists, key=lambda value: value[0] != 'test_ss')
[('test_ss', 'Test 1'),
 ('test_ss', 'Test 4'),
 ('test_2_ss', 'Test 2'),
 ('test_3_ss', 'Test 3')]

答案 2 :(得分:0)

这样做

tuples = [
   ('test_ss', 'Test 1'),
   ('test_2_ss', 'Test 2'),
   ('test_3_ss', 'Test 3'),
   ('test_ss', 'Test 4')
]

sorted(tuples, key=lambda x: x[0].replace('test_ss','test_ _ss'))

[('test_ss', 'Test 1'),
 ('test_ss', 'Test 4'),
 ('test_2_ss', 'Test 2'),
 ('test_3_ss', 'Test 3')]

你希望将'test_ss'在语义上视为排序顺序中的最小元素,但它不是文本表示。 key.replace(..)处理它。