Python 中的对象列表排序

Vaibhhav Khetarpal 2023年1月30日 2021年7月13日
  1. 在 Python 中使用 list.sort() 方法对对象列表进行排序
  2. 在 Python 中使用 sorted() 函数对对象列表进行排序
Python 中的对象列表排序

Python 列表不是同质的,这使得它们与 Python 中提供的其他数据类型不同。

List 的索引从 0 作为第一个索引开始,并按顺序完成。列表中的所有元素都有其明确的位置,因此列表中允许重复。

本教程将介绍在 Python 中对对象列表进行排序的不同方法。

在 Python 中使用 list.sort() 方法对对象列表进行排序

list.sort() 方法按升序或降序对所有列表元素进行排序。

它包含两个可选参数,keyreversekey 参数,顾名思义,是排序过程的关键。reverse 参数用于确定排序顺序。如果 reverse 的值为 True,则按反向/降序进行排序。

但是,该函数在不使用上述可选参数的情况下也能正常工作。

以下代码使用 list.sort() 方法对 Python 中的对象列表进行排序。

class BankEMP:
 
    def __init__(self, name, dept, age):
        self.name = name
        self.dept = dept
        self.age = age
 
    def __repr__(self):
        return '{' + self.name + ', ' + self.dept + ', ' + str(self.age) + '}'
 
if __name__ == '__main__':
 
    emps = [
        BankEMP('Elijah', 'IT', 20),
        BankEMP('Nik', 'Banking', 21),
        BankEMP('Lucien', 'Finance', 19)
    ]
    # sort list by `name` in the natural order
    emps.sort(key=lambda x: x.name)
    print(emps)
 
    # sort list by `name` in reverse order
    emps.sort(key=lambda x: x.name, reverse=True)
    print(emps)

输出:

[{Elijah, IT, 20}, {Lucien, Finance, 19}, {Nik, Banking, 21}]
[{Nik, Banking, 21}, {Lucien, Finance, 19}, {Elijah, IT, 20}]

为了产生 key 参数的值,我们可以使用 operator.attrgetter()

attrgetter() 是从 operator 模块导入的,用于返回一个可调用对象,该对象从其操作数中获取属性。

以下代码使用 list.sort() 方法和 operator.attrgetter() 对 Python 中的对象列表进行排序。

from operator import attrgetter
 
class BankEMP:
 
    def __init__(self, name, dept, age):
        self.name = name
        self.dept = dept
        self.age = age
 
    def __repr__(self):
        return '{' + self.name + ', ' + self.dept + ', ' + str(self.age) + '}'
 
if __name__ == '__main__':
    
    emps = [
        BankEMP('Elijah', 'IT', 20),
        BankEMP('Nik', 'Banking', 21),
        BankEMP('Lucien', 'Finance', 19)
    ]
    #sort list by name in the natural order using 'attrgetter()' 
    emps.sort(key=attrgetter('name'))
 
    print(emps)

输出:

[{Elijah, IT, 20}, {Lucien, Finance, 19}, {Nik, Banking, 21}]

在 Python 中使用 sorted() 函数对对象列表进行排序

Python 提供了一个内置的 sorted() 函数,可以替代 list.sort() 函数。

虽然 list.sort() 不返回任何特定值并对原始列表进行更改,而 sorted() 函数返回已排序的列表而不是对原始列表进行任何修改。

sorted() 函数仅包含 reverse 作为可选参数。

以下代码使用 sorted() 函数对 Python 中的对象列表进行排序。

class BankEMP:
 
    def __init__(self, name, dept, age):
        self.name = name
        self.dept = dept
        self.age = age
 
    def __repr__(self):
        return '{' + self.name + ', ' + self.dept + ', ' + str(self.age) + '}'
 
if __name__ == '__main__':
    
    emps = [
        BankEMP('Elijah', 'IT', 20),
        BankEMP('Nik', 'Banking', 21),
        BankEMP('Lucien', 'Finance', 19)
    ]
    
    #sort list in natural order of name using sorted() function
    sort1= sorted(emps, key=lambda x: x.name)
    print(sort1)

输出:

[{Elijah, IT, 20}, {Lucien, Finance, 19}, {Nik, Banking, 21}]
Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn

相关文章 - Python List