视频教程下载链接:http://pan.baidu.com/s/1c1YHrdI
配套教程下载:http://pan.baidu.com/s/1qYdI6q4
这节课,我们来讲解自定义对象排序,假如现在你正在开发一个社交网络应用,有很多用户在使用,他们都有姓,名,生日,用户ID,最喜欢的颜色,等等各种属性,现在要你编写一个算法,通过对象的各个属性来对这个自定义对象进行排列,比如说,对用户ID排序,那么应该怎么实现呢?在这里,还是需要从operator模块中引入attrgetter类,
from operator import attrgetter |
接着我们来模拟创建一个用户类,然后定义它的init函数,这里有2个属性,用户名和用户id:
class User:
def __init__(self, name, id):
self.name = name
self.id = id |
然后,我们再定义一个repr函数,这个函数的功能是当需要显示一个对象在屏幕上时,将这个对象的属性或者是方法整理成一个可以打印输出的格式。这里我们定义一个这样的输出格式,把用户名和id通过冒号连接起来:
def __repr__(self):
return self.name + ":" + str(self.id) |
大家可能对这个函数没有直观的了解,所以,我们创建一个用户的列表,然后通过循环将所有的User对象打印出来:
users = [
User('huang', 43),
User('Bang', 5),
User('www', 6),
User('oxox', 8),
User('work', 23),
]
for u in users:
print(u) |
运行:
图 6‑16
你看,它会按照repr函数定义的格式将每个User对象打印出来。
但是,打印出来的顺序是按照我们定义的顺序打印的,这里我想对这个对象列表按照指定的方式排序,所以就来到本节课的主题了:对自定义对象进行排序,假如现在我们来对列表对象的name属性排序:
for user in sorted(users, key=attrgetter("name")):
print(user) |
你看,成功的对name属性进行了排序:
图 6‑17
再来对id排序试试:
for user in sorted(users, key=attrgetter("id")):
print(user) |
运行:
图 6‑18
你看,成功的对id进行了排序。
更多精彩内容尽在视频中!
本文固定链接:
http://www.oxox.work/web/python/object-sort/ | 虚幻大学查看原文:
http://www.oxox.work/web/python/object-sort/