我如何在Python中按降序按值排序元组列表中的元素

时间:2015-04-14 13:33:20

标签: python sorting

我得到了一个元组列表如下:

[['1', '2', '2'], ['1', '3', '2'], ['1', '6', '3'], ['1', '8', '46'], ['1', '9', '1'], ['1', '10', '3'], ['2', '1', '7'], ['2', '3', '23'], ['2', '4', '2'], ['2', '5', '5'], ['2', '6', '30'], ['2', '7', '1'], ['2', '8', '26'], ['2', '9', '12'], ['2', '10', '24'], ['2', '11', '10'], ['2', '12', '9'], ['2', '13', '6'], ['2', '14', '9'], ['3', '1', '8'], ['3', '2', '27'], ['3', '4', '3'], ['3', '5', '6']...] 

我想根据元组的第三个元素的值以降序对其进行排序。 我尝试了以下代码:

demands.sort(key=lambda tup:tup[2], reverse=True)

但我不认为它是一个想要的。这是输出:

[['10', '3', '93'], ['10', '8', '93'], ['10', '2', '90'], ['2', '12', '9'], ['2', '14', '9'], ['10', '13', '9'], ['8', '3', '87'], ['8', '2', '85'], ['3', '1', '8'], ['6', '1', '8'], ['10', '7', '8'], ['8', '10', '78'], ['2', '1', '7'], ['3', '13', '7'], ['6', '13', '7'], ['8', '7', '7'], ['9', '8', '7'], ['9', '10', '7'], ['2', '13', '6'], ['3', '5', '6'], ['6', '5', '6'], ['10', '9', '56'], ['8', '9', '52'], ['2', '5', '5'], ['9', '6', '5'], ['11', '8', '5'], ['11', '10', '5'], ['12', '8', '5'], ['12', '10', '5'], ['14', '8', '5'], ['1', '8', '46'], ['10', '11', '43'], ['10', '12', '42'], ['8', '11', '40'], ['12', '6', '40'], ['9', '2', '4'], ['9', '3', '4'], ['11', '6', '4'], ['14', '10', '4'], ['8', '12', '39'], ['10', '14', '38'], ['3', '6', '36'], ['8', '14', '36'], ['6', '8', '33'], ['3', '8', '31'], ['2', '6', '30'], ['6', '10', '30'], ['10', '1', '30'], ['1', '6', '3'], ['1', '10', '3'], ['3', '4', '3'], ['6', '4', '3'], ['11', '2', '3'], ['11', '3', '3'], ['12', '2', '3'], ['12', '3', '3'], ['13', '8', '3'], ['13', '10', '3'], ['14', '3', '3'], ['14', '6', '3'], ['3', '10', '29'], ['6', '3', '28'], ['8', '1', '28'], ['3', '2', '27'], ['6', '2', '27'], ['2', '8', '26'],....]

ps:我还尝试使用sorted函数和itemgetter方法对其进行排序。我得到了与上面相同的ouptut。 你能帮忙吗?

提前谢谢

2 个答案:

答案 0 :(得分:0)

好像你按字母顺序而不是按数值排序。尝试

demands.sort(key=lambda tup:int(tup[2]), reverse=True)

答案 1 :(得分:0)

按字典顺序对列表进行排序,需要将最后一个元素转换为int

>>> l
[['2', '12', '9'], ['2', '14', '9'], ['3', '1', '8'], ['2', '1', '7'], ['2', '13', '6'], ['3', '5', '6'], ['2', '5', '5'], ['1', '8', '46'], ['2', '6', '30'], ['1', '6', '3'], ['1', '10', '3'], ['3', '4', '3'], ['3', '2', '27'], ['2', '8', '26'], ['2', '10', '24'], ['2', '3', '23'], ['1', '2', '2'], ['1', '3', '2'], ['2', '4', '2'], ['2', '9', '12'], ['2', '11', '10'], ['1', '9', '1'], ['2', '7', '1']]

>>> l.sort(key=lambda tup:int(tup[2]), reverse=True)
>>> l
[['1', '8', '46'], ['2', '6', '30'], ['3', '2', '27'], ['2', '8', '26'], ['2', '10', '24'], ['2', '3', '23'], ['2', '9', '12'], ['2', '11', '10'], ['2', '12', '9'], ['2', '14', '9'], ['3', '1', '8'], ['2', '1', '7'], ['2', '13', '6'], ['3', '5', '6'], ['2', '5', '5'], ['1', '6', '3'], ['1', '10', '3'], ['3', '4', '3'], ['1', '2', '2'], ['1', '3', '2'], ['2', '4', '2'], ['1', '9', '1'], ['2', '7', '1']]