当我将sort
或sorted
应用于列表列表时,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')]]
答案 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第三..