如何以 list[i][1] 作为键从大到小对元组列表进行排序

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

这是我的清单。

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

排序此列表的结果将是。

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

我尝试使用:

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

但我需要扭转它。

我可以添加另一个密钥吗?

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

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

如果你按数字排序,你也可以直接取反:

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

operator.itemgetter(n) 构造一个可调用对象,假定可迭代对象(列表、元组、集合)作为输入,并从中获取第 n 个元素。

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)]
alpha_items.sort(key=lambda s:s[1], reverse = True)

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

基本上我们检查是否:

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

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

重复。

查看排序-algorithms.com并查看泡泡算法动画

>>> 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)]