按数字字符串对数组进行排序 (Python 3.4.2)
Sorting an array by a number string (Python 3.4.2)
我一直在尝试对如下所示的数组进行排序:
sav = [['Name: ', 'Alex', 'Score: ', '2'], ['Name: ', 'Josh, 'Score: ', '3'], ['Name: ', 'James', 'Score: ', '1']]
使其显示为:
sav = [['Name: ', 'James', 'Score: ', '1'], ['Name: ', 'Alex, 'Score: ', '2'], ['Name: ', 'Josh', 'Score: ', '3']]
这将按 [3]
索引排序,但由于数字是一个字符串,我不确定如何执行此操作。 (这可能看起来像一个重复的问题,但我环顾四周却找不到答案。)
您可以使用以下 lambda
作为排序关键字:
>>> sorted(sav, key=lambda x: int(x[3]))
[['Name: ', 'James', 'Score: ', '1'],
['Name: ', 'Alex', 'Score: ', '2'],
['Name: ', 'Josh', 'Score: ', '3']]
此处的lambda
函数从每个列表中挑选出索引为3的元素并将其视为整数(使用int
)。该列表按这些整数排序。
如果保留为字符串,排序时会得到奇怪的结果,因为字符串是按字典顺序排序的。例如,'12' < '8'
.
此 returns 列表的排序副本 sav
- 您可以将名称重新绑定到排序列表:
sav = sorted(sav, key=lambda x: int(x[3]))
我一直在尝试对如下所示的数组进行排序:
sav = [['Name: ', 'Alex', 'Score: ', '2'], ['Name: ', 'Josh, 'Score: ', '3'], ['Name: ', 'James', 'Score: ', '1']]
使其显示为:
sav = [['Name: ', 'James', 'Score: ', '1'], ['Name: ', 'Alex, 'Score: ', '2'], ['Name: ', 'Josh', 'Score: ', '3']]
这将按 [3]
索引排序,但由于数字是一个字符串,我不确定如何执行此操作。 (这可能看起来像一个重复的问题,但我环顾四周却找不到答案。)
您可以使用以下 lambda
作为排序关键字:
>>> sorted(sav, key=lambda x: int(x[3]))
[['Name: ', 'James', 'Score: ', '1'],
['Name: ', 'Alex', 'Score: ', '2'],
['Name: ', 'Josh', 'Score: ', '3']]
此处的lambda
函数从每个列表中挑选出索引为3的元素并将其视为整数(使用int
)。该列表按这些整数排序。
如果保留为字符串,排序时会得到奇怪的结果,因为字符串是按字典顺序排序的。例如,'12' < '8'
.
此 returns 列表的排序副本 sav
- 您可以将名称重新绑定到排序列表:
sav = sorted(sav, key=lambda x: int(x[3]))