为什么没有正确排序清单?

时间:2014-12-11 23:23:14

标签: python list sorting

当我将sortsorted应用于列表列表时,Python没有正确排序。
例如,我想按B1, B2, ..., B10, B11, ...订购 但是按B1, B10, B11, B2, B20, B21, ...排序的Python 列表列表比我放在这里的列表更大。

 def getKey(item):
     return item[0]

l = [['B3', '08:20', '08:50', ('LH233', 'Berlin', '08:20', '112', '203')], ['B10', '08:40', '08:55', ('AF76', 'Toulouse', '08:40', '57', '102')]]

l.sort(key=getKey) OR sorted(l, key=getKey)

Returns:

[['B10', '08:40', '08:55', ('AF76', 'Toulouse', '08:40', '57', '102')], ['B3', '08:20', '08:50', ('LH233', 'Berlin', '08:20', '112', '203')]]

4 个答案:

答案 0 :(得分:2)

这是因为,根据Python,10出现在2之前,因为在您的示例中,您实际上是在进行字符串比较,而不是数字比较。一种解决方案是将string-numbers转换为数字。

答案 1 :(得分:2)

这是因为您的键是按字典顺序排序的字符串。要按您想要的顺序排序,需要整数键。获得这些的一种方法如下。

>>> l = [['B3', '08:20', '08:50', ('LH233', 'Berlin', '08:20', '112', '203')], ['B10', '08:40', '08:55', ('AF76', 'Toulouse', '08:40', '57', '102')]]
>>> sorted(l, key=lambda x:int(x[0][1:]))
[['B3', '08:20', '08:50', ('LH233', 'Berlin', '08:20', '112', '203')], ['B10', '08:40', '08:55', ('AF76', 'Toulouse', '08:40', '57', '102')]]

答案 2 :(得分:1)

你需要将“B3”和“B10”变成整数,例如3和10:

def getKey(item):    
    return int(item[0][1:])

答案 3 :(得分:0)

因为它按第一个数字排序。列表中的列表。

  

B1-B10-B11-

1首先,1和0秒,1和1第三..