2

所以我有这个列表,我们称之为listA。我正在尝试获取每个列表中的 [3] 项,例如['5.01','5.88','2.10','9.45','17.58','2.76']按排序顺序。因此,最终结果将重新开始整个列表,圣诞老人位于顶部。这有任何意义吗?

[['John Doe', u'25.78', u'20.77', '5.01'], ['Jane Doe', u'21.08', u'15.20', '5.88'], ['James Bond', u'20.57', u'18.47', '2.10'], ['Michael Jordan', u'28.50', u'19.05', '9.45'], ['Santa', u'31.13', u'13.55', '17.58'], ['Easter Bunny', u'17.20', u'14.44', '2.76']]

4

4 回答 4

6

如果您想按排序顺序返回完整列表,这可能会起作用。这将获取您的输入列表并sorted在其之上运行。reverse设置为True以反向(降序)顺序对列表进行排序的参数,并且参数key指定排序的方法,在本例中是float每个列表的第三个参数的方法:

In [5]: l = [['John Doe', u'25.78', u'20.77', '5.01'] # continues...    
In [6]: sorted(l, reverse=True, key=lambda x: float(x[3]))
Out[6]:
[['Santa', u'31.13', u'13.55', '17.58'],
 ['Michael Jordan', u'28.50', u'19.05', '9.45'],
 ['Jane Doe', u'21.08', u'15.20', '5.88'],
 ['John Doe', u'25.78', u'20.77', '5.01'],
 ['Easter Bunny', u'17.20', u'14.44', '2.76'],
 ['James Bond', u'20.57', u'18.47', '2.10']]

如果您只需要按排序顺序排列的值,则其他答案提供了可行的方法。

于 2012-12-04T04:59:22.890 回答
2

尝试这个:

>>> listA=[['John Doe', u'25.78', u'20.77', '5.01'], ['Jane Doe', u'21.08', u'15.20', '5.88'], ['James Bond', u'20.57', u'18.47', '2.10'], ['Michael Jordan', u'28.50', u'19.05', '9.45'], ['Santa', u'31.13', u'13.55', '17.58'], ['Easter Bunny', u'17.20', u'14.44', '2.76']]

>>> [x[3] for x in sorted(listA, reverse = True, key = lambda i : float(i[3]))]
['17.58', '9.45', '5.88', '5.01', '2.76', '2.10']
于 2012-12-04T05:01:55.400 回答
1

lambda此任务不需要匿名函数。您可以使用operator.itemgetter,这可能更直观:

from operator import itemgetter

res1 = sorted(map(itemgetter(3), listA), reverse=True, key=float)

['17.58', '9.45', '5.88', '5.01', '2.76', '2.10']
于 2018-05-13T13:53:03.570 回答
0
from operator import itemgetter
lstA.sort(reverse = True, key = itemgetter(3))

你很高兴。当您有多个要排序的索引时,在排序中使用 itemgetter() 非常有用。假设您想按字母顺序对第一个值进行排序,以防出现平局,您可以执行以下操作

from operator import itemgetter
lstA.sort(key = itemgetter(0))
lstA.sort(reverse = True, key = itemgetter(3))

瞧!

于 2012-12-04T05:07:52.437 回答