这是根据另一个列表的排序排列对列表进行排序的不好方法吗?

use*_*457 2 python sorting list

问题:

我有一个列表列表,rowData其中包含表格格式的其他列表,即

rowData = [strLabel, intA, intB]
Run Code Online (Sandbox Code Playgroud)

我想rowData根据值和的总和进行排序intAintB

因此,如果

rowData = [ ['hi', 0, 1], 
            ['how', 0, 0],
            ['ru', 2, 2] ]
Run Code Online (Sandbox Code Playgroud)

我想结束

rowData = [ ['how', 0, 0], 
             ['hi', 0, 1], 
             ['ru', 2, 2] ]
Run Code Online (Sandbox Code Playgroud)

当前解决方案

目前,我有一个单独的列表sums对应于对应于第二和第三个"列"的总和intAintB.我的解决方案

[rowData[i] for i in [sums.index(j) for j in sorted(sums)]]
Run Code Online (Sandbox Code Playgroud)

经过一段时间的搜索后,这是对我有意义的唯一方法,但我对其效率低下充满信心,并且想知道与其他(希望是短期的)替代方案相比效率是多么低效.

Zda*_*daR 6

您可以使用lambda表达式将key参数传递给sort()and sorted()函数,该表达式将定义要在其上进行排序的键.

rowData = [ ['hi', 0, 1], 
             ['how', 0, 0],
             ['ru', 2, 2] ]

rowData.sort(key = lambda x:(x[1]+x[2]))

print rowData
>>> [['how', 0, 0], ['hi', 0, 1], ['ru', 2, 2]]
Run Code Online (Sandbox Code Playgroud)

或者,如果您想保留其中的内容,rowData您可以使用sorted()相同的方式:

sortedData = sorted(rowData, key = lambda x:(x[1]+x[2]))
Run Code Online (Sandbox Code Playgroud)