Python学习记录14-对不支持排序的原生对象进行比较

本节的内容是我们要比较2个类型相同的对象,但是他们并不支持原生的比较操作。所以就需要我们来指定要比较的条件来进行排序。 我们直接上代码

from operator import attrgetter

class People:
    def __init__(self,uid):
        self.uid = uid
    def __repr__(self):
        return f'我是people{self.uid}'


users = [People(35),People(18),People(23)]
#print(sorted(users)) #  直接报错 TypeError: '<' not supported between instances of 'People' and 'People'
print(sorted(users,key=attrgetter('uid')))
#[我是people18, 我是people23, 我是people35]

print(sorted(users,key=lambda u:u.uid))
#也可以这样使用lambda匿名函数来写。但是使用attrgetter性能更好一些。

在以上代码,声明了一个people类。 然后我们新建了一个users的列表,里面存放着3个people对象以及他们各自的uid,我们想通过uid进行比较。 直接进行sorted就会报错。 这个时候我们就可以使用operator的attrgetter了 ,和上一节的itemgetter非常像。
同理它也支持允许多个字段进行比较,也同样适用于min和max函数


print(min(users,key=attrgetter('uid'))) # 我是people18
print(max(users,key=attrgetter('uid'))) #我是people35
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇