Python 中的对象列表排序
Python 列表不是同质的,这使得它们与 Python 中提供的其他数据类型不同。
List 的索引从 0 作为第一个索引开始,并按顺序完成。列表中的所有元素都有其明确的位置,因此列表中允许重复。
本教程将介绍在 Python 中对对象列表进行排序的不同方法。
在 Python 中使用 list.sort()
方法对对象列表进行排序
list.sort()
方法按升序或降序对所有列表元素进行排序。
它包含两个可选参数,key
和 reverse
。key
参数,顾名思义,是排序过程的关键。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 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