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)
出了什么问题?
您的值是字符串,因此您按字典顺序排序,而不是数字排序.'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)