您的位置:

List按照某个字段排序的多种方法

一、List按照某个字段排序倒序

def sort_list_reverse(list_to_sort, field):
    """
    对List进行指定字段的逆序排序
    :param list_to_sort: 要排序的List
    :param field: 排序的字段
    :return: 排序后的List
    """
    sorted_list = sorted(list_to_sort, key=lambda k: k[field], reverse=True)
    return sorted_list

以上代码使用Python自带的sorted函数,通过传入Lambda表达式指定排序的字段,同时通过设置reverse参数为True指定降序排序。

二、List根据某个字段排序

def sort_list(list_to_sort, field):
    """
    对List进行指定字段的升序排序
    :param list_to_sort: 要排序的List
    :param field: 排序的字段
    :return: 排序后的List
    """
    sorted_list = sorted(list_to_sort, key=lambda k: k[field])
    return sorted_list

以上代码与上面的例子类似,只是将reverse参数设置为False,即升序排序。

三、如何根据List中某个字段排序

我们通常可以使用Python自带的sorted函数进行排序,但是很多时候需要对List中的某个字段进行排序。此时,我们常常可以利用List中每个元素都是一个字典的特点,使用Lambda表达式指定排序的字段。

list_to_sort = [
    {"name": "Tom", "age": 18},
    {"name": "Bob", "age": 21},
    {"name": "Jerry", "age": 16},
]
sorted_list = sorted(list_to_sort, key=lambda k: k["age"])

以上代码中,我们将每一个元素都表示为一个字典,然后使用Lambda表达式指定以“age”为排序字段,最终得到的就是根据“age”从小到大排序的List。

四、List按某个字段分组

有时候我们需要按照某个字段将List分组,可以利用Python自带的groupby函数来实现。

from itertools import groupby

list_to_group = [
    {"name": "Tom", "age": 18, "gender": "male"},
    {"name": "Bob", "age": 21, "gender": "male"},
    {"name": "Jerry", "age": 16, "gender": "female"},
    {"name": "Lily", "age": 22, "gender": "female"},
]

sorted_list = sorted(list_to_group, key=lambda k: k["gender"])
grouped_list = {k: list(v) for k, v in groupby(sorted_list, lambda k: k["gender"])}

以上代码中,我们按照“gender”字段进行排序并分组,最终得到的是一个字典,其中键值为“male”和“female”,对应的值是按照“gender”进行排序后的子List。

五、List数组根据某个字段排序

有时我们需要对数组中的元素按照某个字段排序,可以利用NumPy库的argsort函数来实现。

import numpy as np

list_to_sort = [
    {"name": "Tom", "age": 18},
    {"name": "Bob", "age": 21},
    {"name": "Jerry", "age": 16},
]

sorted_array = np.argsort([x["age"] for x in list_to_sort])
sorted_list = [list_to_sort[i] for i in sorted_array]

以上代码使用argsort函数按照“age”字段进行排序,并返回排序后的索引值,最终得到的sorted_array为[2,0,1],即代表经过排序后的元素在原List中的索引值。最后我们可以根据这些索引值,将List中对应位置的元素排序后构成新的List。

六、根据List中某个字段的值排序

除了按照字段进行排序,有时候我们也需要根据特定的值进行排序。可以利用Python自带的sort函数配合Lambda表达式来实现。

list_to_sort = [
    {"name": "Tom", "sex": "F"},
    {"name": "Bob", "sex": "M"},
    {"name": "Jerry", "sex": "M"},
    {"name": "Lily", "sex": "F"},
]

sorted_list = sorted(list_to_sort, key=lambda k: ["F", "M"].index(k["sex"]))

以上代码中,我们使用Lambda表达式指定了排序的方法,先将“F”和“M”使用index方法获取对应的索引值,然后按照这些索引值进行排序。最终得到的是一个按照“sex”字段排好序的List。

七、List多字段排序sort

除了按照单个字段排序,我们还可以按照多个字段进行排序,可以利用Python自带的sort函数进行实现。

list_to_sort = [
    {"name": "Tom", "age": 18, "score": 80},
    {"name": "Bob", "age": 21, "score": 85},
    {"name": "Jerry", "age": 16, "score": 70},
    {"name": "Lily", "age": 22, "score": 95},
]

sorted_list = sorted(list_to_sort, key=lambda k: (k["age"], k["score"]))

以上代码中,我们使用Lambda表达式按照“age”字段和“score”字段进行排序,最终得到的是按照多个字段排好序的List。

八、List集合排序指定字段

有时候我们需要按照一个集合中元素的某个字段进行排序,可以利用Python自带的sorted函数和Lambda表达式来实现。

set_to_sort = {
    {"name": "Tom", "age": 18},
    {"name": "Bob", "age": 21},
    {"name": "Jerry", "age": 16},
}

sorted_set = sorted(set_to_sort, key=lambda k: k["age"])

以上代码中,我们将集合中每一个元素都表示为一个字典,然后使用Lambda表达式指定以“age”为排序字段,最终得到的就是根据“age”从小到大排序的集合。

九、按某个字段降序排列SQL选取

在SQL语句中,我们可以使用ORDER BY子句来排列选取出来的结果集,可以使用DESC关键字来指定降序排序。例如:

SELECT name, age, score FROM students ORDER BY score DESC;

以上SQL语句会从students表中选取出name, age, score三个字段,并且按照score进行降序排序。