Python中基于给定字符串的列表排序列表

Python中基于给定字符串的列表排序列表,python,list,sorting,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'),

我有如下列表:

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和其他(、等)的一些示例,但没有找到正确的方法(或者我只是没有正确地遵循这些示例)


有指针吗?

如果要分区,只要在字符串匹配时返回
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')]

您可以使用以下简单的按键功能:

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')]
这就行了

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(…)
处理它。

@arman-感谢编辑…我认为我做得对,但显然我没有:)如果两个元素的第一个字符串相等,排序是否任意,或者你想引入一个平局打破者?显然你想要某种自然的排序,因为
test\u-ss
应该在
test\u-ss
之前(因为
2
的代码低于
s
)。做
sorted(list of list)
并亲自查看它“按“test”排序”是什么意思,按第一个位置排序?Eric,请回答@karakfa的评论,这可能是一个很好的猜测wants@Pynchia胡猜!好吧,也许我是唯一一个不明白这个问题的人。我原以为他想按元组的特定位置排序,但现在还不清楚(见上文我对问题的评论)@PeterWood-我想这就是事实。“让我来付吧。”彼得伍德投了赞成票。我想你从一开始就做到了这正是我所需要的,对我的实现来说是完美的。非常感谢。