我有一个列表如下:
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 strings,Sorting lists based on a particular element - Python,sorting multiple lists based on a single list in python等)但是没有找到正确的方法(或者我没有正确地遵循这些例子。
任何指针?
答案 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(..)
处理它。