Files
Python_CookBook_repo/1.数据结构与算法/14.原生不支持比较操作的对象排序.py
2025-09-10 16:12:45 +08:00

33 lines
1.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 众所周知对class这种原生不支持比较的对象直接进行比较会造成暴毙
# 我们但如果非比不可呢?比如这个东西:
class User:
def __init__(self,user_id):
self.user_id = user_id
def __repr__(self):
return "User({})".format(self.user_id)
# 这里有一个列表user
user = [User(23), User(3), User(99)]
# 如果这时候需要按照某个属性给这个列表排序那么直接sorted会报错
try:
sorted(user)
pass
except:
print("你看吧,报错了")
# 这里的原因是对象不能直接进行比较,所以想要排序只能按照对象里的某个属性
# 有两种解决方案:
sorted_list = sorted(user, key=lambda x: x.user_id)
print(sorted_list)
# 要么就用operator库里的attrgetter
from operator import attrgetter
sorted_list = sorted(user, key=attrgetter("user_id"))
print(sorted_list)
# 用这东西的好处和针对字典的itemgetter一样可以取多个字段
# sorted_list = sorted(user, key=attrgetter("user_id", "word_2", "word_3", ...))
# 同样的max和min这种有key参数的内建函数都能用这些东西折腾