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对应于对应于第二和第三个"列"的总和intA及intB.我的解决方案
[rowData[i] for i in [sums.index(j) for j in sorted(sums)]]
Run Code Online (Sandbox Code Playgroud)
经过一段时间的搜索后,这是对我有意义的唯一方法,但我对其效率低下充满信心,并且想知道与其他(希望是短期的)替代方案相比效率是多么低效.
您可以使用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)