HOWTO · Python
Ordenar lista de objetos en Python
Este tutorial demuestra cómo ordenar una 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}]