2011-06-01 73 views
1

我该如何排序?Python排序字​​符串列表

>>> list = ["a_0","a_1","a_2","a_3","a_10","a_11","a_23","a_5","a_6","a_5"] 
>>> sorted(list) 
['a_0', 'a_1', 'a_10', 'a_11', 'a_2', 'a_23', 'a_3', 'a_5', 'a_5', 'a_6']> 

我需要它是:

['a_0', 'a_1', 'a_2', 'a_3', 'a_5', 'a_5', 'a_6, 'a_10', 'a_11', 'a_23']> 

因此,它基于“数字”分类 感谢我前进!

回答

10

您的意思是:sorted(list, key=lambda d: int(d[2:]))

+0

那就是它!非常感谢 – Harry 2011-06-01 09:22:52

+2

请注意,这将根据数字对* only *进行排序,而不是对'a'进行排序。它还要求数字以字符2开始。 – 2011-06-01 09:25:05

+0

“请注意,这将仅根据数字进行排序”,实际上是 – taijirobot2 2011-06-01 09:39:28

6

您需要编写一个“键功能”,将您的字符串转换为具有所需顺序的搜索键。例如:

def key(k): 
    s, sep, i = k.partition('_') 
    return (s, int(i)) 

>>> L = ["a_0","a_1","b_2","c_2","a_10","a_11","a_23","b_5","a_6","c_5"] 
>>> sorted(L, key=key) 
['a_0', 'a_1', 'a_6', 'a_10', 'a_11', 'a_23', 'b_2', 'b_5', 'c_2', 'c_5'] 
+0

谢谢,这实际上是我的确切目的所需要的。我改变了一下,现在完美。虽然你的回答是正确的,但我已经根据问题在正确的答案上标记了答案。 – Harry 2011-06-01 09:46:51