我试图按照每个列表的第一项按升序排列以下列表列表:
framenos = [
['1468', '2877', 'Pos.:', 95],
['3185', '4339', 'Pos.:', 96],
['195', '1460', 'Pos.:', 97]
]
我正在使用以下内容:
framesorted = sorted(framenos, key=lambda x: x[0]) #sort ranges by start numbers
给出了:
[['1468', '2877', 'Pos.:', 95], ['195', '1460', 'Pos.:', 97], ['3185', '4339', 'Pos.:', 96]]
出了什么问题?
答案 0 :(得分:5)
您的值是字符串,因此您要排序lexicographically,而不是数字。 '1468'
在'195'
之前排序,因为'4'
在ASCII标准中位于'9'
之前,就像'Ask'
将在'Attribution'
之前排序一样。
如果需要数字排序,请将字符串转换为数字:
framesorted = sorted(framenos, key=lambda x: int(x[0]))
演示:
>>> framenos = [
... ['1468', '2877', 'Pos.:', 95],
... ['3185', '4339', 'Pos.:', 96],
... ['195', '1460', 'Pos.:', 97]
... ]
>>> sorted(framenos, key=lambda x: int(x[0]))
[['195', '1460', 'Pos.:', 97], ['1468', '2877', 'Pos.:', 95], ['3185', '4339', 'Pos.:', 96]]
>>> from pprint import pprint
>>> pprint(_)
[['195', '1460', 'Pos.:', 97],
['1468', '2877', 'Pos.:', 95],
['3185', '4339', 'Pos.:', 96]]
答案 1 :(得分:0)
由于每个列表的第一个元素是一个字符串,因此按字母顺序对这些数字进行排序。为了根据第一个元素的整数值对这些列表进行排序,请尝试转换为int:
framesorted = sorted(framenos, key=lambda x: int(x[0]))