Python:排序列表不能按预期运行

Thi*_*e19 0 python sorting lambda list

我试图按升序中的每个列表的第一项对以下列表列表进行排序:

framenos = [
    ['1468', '2877', 'Pos.:', 95],
    ['3185', '4339', 'Pos.:', 96],
    ['195', '1460', 'Pos.:', 97]
]
Run Code Online (Sandbox Code Playgroud)

我使用以下内容来执行此操作:

framesorted = sorted(framenos, key=lambda x: x[0]) #sort ranges by start numbers
Run Code Online (Sandbox Code Playgroud)

这使:

[['1468', '2877', 'Pos.:', 95], ['195', '1460', 'Pos.:', 97], ['3185', '4339', 'Pos.:', 96]]
Run Code Online (Sandbox Code Playgroud)

出了什么问题?

Mar*_*ers 5

您的值是字符串,因此您按字典顺序排序,而不是数字排序.'1468'之前的排序'195',因为'4'来之前'9'在ASCII标准,就像'Ask'将之前排序'Attribution'.

如果需要数字排序,请将字符串转换为数字:

framesorted = sorted(framenos, key=lambda x: int(x[0]))
Run Code Online (Sandbox Code Playgroud)

演示:

>>> 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]]
Run Code Online (Sandbox Code Playgroud)