关于python:如何使用list [i] [1]将元组列表从最大到最小排序

how to sort a list of tuples with list[i][1] as key from biggest to smallest

本问题已经有最佳答案,请猛点这里访问。

这是我的单子。

1
[('a', 12), ('c', 4), ('b', 3), ('e', 6), ('d', 5), ('g', 50), ('f', 30),]

排序此列表的结果将是。

1
[('g', 50), ('f', 30), ('a', 12), ('e', 6), ('d', 5), ('c', 4), ('b', 3)]

我尝试使用:

1
x = sorted(alpha_items, key=lambda x: x[1],)

但我需要扭转它。

我可以再加一把钥匙吗?


显而易见的方法是显式地使用reverse参数,该参数正是为此目的而存在的:

1
sorted(alpha_items, key=lambda x: x[1], reverse=True)

如果你是按数字排序,你也可以把它们取反:

1
sorted(alpha_items, key=lambda x: -x[1])


operator.itemgetter(n)构造了一个可调用对象,它假定可调用对象(list、tuple、set)作为输入,并从中提取第n个元素。

1
2
3
4
5
6
7
8
In [26]: mylist=[('a', 12), ('c', 4), ('b', 3), ('e', 6), ('d', 5), ('g', 50), ('f', 30),]

In [27]: from operator import itemgetter

In [30]: s_l=sorted(mylist,key=itemgetter(1),reverse=True)

In [31]: s_l
Out[31]: [('g', 50), ('f', 30), ('a', 12), ('e', 6), ('d', 5), ('c', 4), ('b', 3)]


为什么不像气泡这样简单的排序算法呢?

基本上,我们检查是否:

1
a[i][1]<a[i+1][1].

如果是这样的话,我们就简单地交换它们。

重复。

检查sorting-algorithms.com并查看气泡算法动画。

1
2
3
4
5
6
7
8
>>> a = [('a', 12), ('c', 4), ('b', 3), ('e', 6), ('d', 5), ('g', 50),('f', 30),]  
>>> for elem in range(len(a)-1, 0, -1):
...   for i in range(elem):
...     if a[i][1]<a[i+1][1]:
...        a[i], a[i+1] = a[i+1], a[i]
...
>>> a
[('g', 50), ('f', 30), ('a', 12), ('e', 6), ('d', 5), ('c', 4), ('b', 3)]


1
alpha_items.sort(key=lambda s:s[1], reverse = True)