Ordenar lista de objetos en Python

Vaibhhav Khetarpal 10 octubre 2023
  1. Utilice el método list.sort() para ordenar la lista de objetos en Python
  2. Utilice la función sorted() para ordenar la lista de objetos en Python
Ordenar lista de objetos en Python

Las listas de Python no son homogéneas, lo que las hace diferentes de los otros tipos de datos proporcionados en Python.

La indexación de una lista comienza con 0 como primer índice y se realiza de forma secuencial. Todos los elementos de la lista tienen su lugar definido por lo que se permite la duplicación en las listas.

Este tutorial presentará diferentes métodos para ordenar la lista de objetos en Python.

Utilice el método list.sort() para ordenar la lista de objetos en Python

El método list.sort() ordena todos los elementos de la lista en orden ascendente o descendente.

Contiene dos parámetros opcionales, key y reverse. El parámetro key, como sugiere su nombre, sirve como clave para el proceso de clasificación. El parámetro reverse se utiliza para determinar el orden de clasificación. Si el valor de reverse es True, entonces la clasificación se produce en orden inverso / descendente.

Sin embargo, la función funciona bien sin el uso de los parámetros opcionales mencionados anteriormente.

El siguiente código usa el método list.sort() para ordenar la lista de objetos en 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)

Producción :

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

Para producir el valor del parámetro key, podemos usar operator.attrgetter().

attrgetter() se importa del módulo operator y se utiliza para devolver un objeto invocable que obtiene el atributo de su operando.

El siguiente código usa el método list.sort() y operator.attrgetter() para ordenar la lista de objetos en 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)

Producción :

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

Utilice la función sorted() para ordenar la lista de objetos en Python

Python proporciona una función incorporada sorted() que puede servir como alternativa a la función list.sort().

Mientras que list.sort() no devuelve ningún valor específico y realiza cambios en la lista original, la función sorted() devuelve la lista ordenada en lugar de realizar modificaciones a la lista original.

La función sorted() solo contiene reverse como parámetro opcional.

El siguiente código usa la función sorted() para ordenar la lista de objetos en 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)

Producción :

[{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

Artículo relacionado - Python List