按 Python 中的第二个或多个元素对元组列表进行排序

目录

Sort a list of tuples by the second element in Python

  1. 按 Python 中的第二个元素对元组列表进行排序
  2. 按降序的第二个元素对元组列表进行排序
  3. 在 Python 中按多个元素对元组列表进行排序
  4. 按降序排列多个元素的元组列表

在 Python 中按第二个元素对元组列表进行排序

使用函数key的参数sorted()按第二个元素对元组列表进行排序。

该函数将返回一个新列表,按第二个元组元素排序。

主程序
# ✅ sort a list of tuples by second element (ascending order) list_of_tuples = [(1, 50), (1, 20), (1, 30)] sorted_list = sorted( list_of_tuples, key=lambda t: t[1] ) print(sorted_list) # 👉️ [(1, 20), (1, 30), (1, 50)]

如果您需要按第二个元素降序对元组列表进行排序,请改用以下代码示例。

主程序
# ✅ sort a list of tuples by second element (descending order) list_of_tuples = [(1, 50), (1, 20), (1, 30)] sorted_list = sorted( list_of_tuples, key=lambda t: t[1], reverse=True ) print(sorted_list) # 👉️ [(1, 50), (1, 30), (1, 20)]

sorted函数接受一个可迭代对象,并从可迭代对象中项目返回一个新的排序列表。

该函数采用可选key参数,可用于按不同标准进行排序。

主程序
list_of_tuples = [(1, 50), (1, 20), (1, 30)] sorted_list = sorted( list_of_tuples, key=lambda t: t[1] ) print(sorted_list) # 👉️ [(1, 20), (1, 30), (1, 50)]
Python 索引是从零开始的。元组中的第一项的索引为,第二项的索引为,依此类推。 01

参数key可以设置为确定排序标准的函数。

该示例按每个元组中的第二个元素对元组列表进行排序。

按第二个元素降序排列元组列表

如果您需要按降序(从大到小)的第二个元素对元组列表进行排序,请reversetrue调用
sorted().

主程序
list_of_tuples = [(1, 50), (1, 20), (1, 30)] sorted_list = sorted( list_of_tuples, key=lambda t: t[1], reverse=True ) print(sorted_list) # 👉️ [(1, 50), (1, 30), (1, 20)]
如果reverse参数设置为True,则元素将按照每次比较都反转的方式进行排序。

使用 itemgetter() 按第二个元素对元组列表进行排序

您还可以使用该operator.itemgetter()方法来指定要作为排序依据的索引。

主程序
from operator import itemgetter list_of_tuples = [(1, 50), (1, 20), (1, 30)] sorted_list = sorted( list_of_tuples, key=itemgetter(1) ) print(sorted_list) # 👉️ [(1, 20), (1, 30), (1, 50)]

operator.itemgetter

方法返回一个可调用对象,该对象获取指定索引处的项目

例如,x = itemgetter(1)然后调用x(my_tuple),返回
my_tuple[1]

在 Python 中按多个元素对元组列表进行排序

要按多个元素对元组列表进行排序:

  1. 将列表传递给sorted()函数。
  2. 使用key参数选择每个元组中特定索引处的元素。
  3. sorted()函数将按指定元素对元组列表进行排序。
主程序
list_of_tuples = [(1, 3, 100), (2, 3, 50), (3, 2, 75)] # ✅ sort a list of tuples by second and third elements sorted_list = sorted( list_of_tuples, key=lambda t: (t[1], t[2]) ) print(sorted_list) # 👉️ [(3, 2, 75), (2, 3, 50), (1, 3, 100)]

sorted函数接受一个可迭代对象,并从可迭代对象中项目返回一个新的排序列表。

该函数采用可选key参数,可用于按不同标准进行排序。

参数key可以设置为确定排序标准的函数。

1该示例按索引处和2每个元组中的元素对元组列表进行排序。

由于第三个元组中的第二个项目是最低的,它被移到前面。

第一个和第二个元组中的第二个项目是相等的(都是3),所以第三个项目进行比较并且因为50小于100,它排在第二位。

按多个元素降序排列元组列表

如果您需要按降序对多个元素的元组列表进行排序,请在函数调用中将reverse参数设置为Truesorted()

主程序
list_of_tuples = [(1, 3, 100), (3, 2, 75), (2, 3, 50)] sorted_list = sorted( list_of_tuples, key=lambda t: (t[1], t[2]), reverse=True ) print(sorted_list) # 👉️ [(1, 3, 100), (2, 3, 50), (3, 2, 75)]
如果reverse参数设置为True,则元素将按照每次比较都反转的方式进行排序。

元组中的 2 个具有3作为第二个元素,并且由于我们将reverse
参数设置为
True,具有更大的第三个元素的元组被移到前面。

列表中的最后一个元组是第二个元素最低的元组。

使用 operator.itemgetter 按多个元素对元组列表进行排序

您还可以使用该operator.itemgetter()方法来指定要作为排序依据的索引。

主程序
from operator import itemgetter list_of_tuples = [(1, 3, 100), (2, 3, 50), (3, 2, 75)] # ✅ sort list of tuples by second and third elements sorted_list = sorted( list_of_tuples, key=itemgetter(1, 2), ) print(sorted_list) # 👉️ [(3, 2, 75), (2, 3, 50), (1, 3, 100)]

The
operator.itemgetter
method returns a callable object that fetches the item at the specified index.

For example, x = itemgetter(1) and then calling x(my_tuple), returns
my_tuple[1].

Using the itemgetter method is faster than using a lambda function, but it is
also a bit more implicit.

# Sort a list of tuples by multiple elements using list.sort()

Alternatively, you can use the list.sort() method to sort the list of tuples
by multiple elements in place.

main.py
from operator import itemgetter list_of_tuples = [(1, 3, 100), (2, 3, 50), (3, 2, 75)] list_of_tuples.sort(key=itemgetter(1, 2)) print(list_of_tuples) # 👉️ [(3, 2, 75), (2, 3, 50), (1, 3, 100)]

The list.sort
method sorts the list in place and it uses only < comparisons between items.

The method takes the following 2 keyword-only arguments:

Name Description
key a function that takes 1 argument and is used to extract a comparison key from each list element
reverse 一个布尔值,指示是否应反转每个比较

请注意,该list.sort方法会就地改变列表并
返回 None

sorted()如果您需要一个新的列表实例而不是就地突变,则可以使用该函数。

我还写了一篇关于
如何获取排序列表的索引的文章。