对字典列表进行排序
from operator import itemgetter
# 有如下一个列表,我们需要给其中的字典进行排序,比如根据uid排序
rows = [
{'name': 'Brian', 'id': 1003},
{'name': 'David', 'id': 1002},
{'name': 'John', 'id': 1001},
{'name': 'Big', 'id': 1004},
{'name': 'Ag', 'id': 1004}
]
# 改变当前列表
# rows.sort(key = lambda r:r.get("uid"))
# print(rows)
# 新建列表
# rows_by_id = sorted(rows,key = lambda r:r.get("id"))
# print(rows_by_id)
# 使用lambda 根据id和name进行排序
# rows_by_id_name = sorted(rows, key=lambda r: (r['id'],r['name']))
# print(rows_by_id_name)
# 使用operator中的itemgetter,根据id排序
# rows_by_id = sorted(rows, key=itemgetter('id'))
# print(rows_by_id )
根据id和name排序
rows_by_id_name = sorted(rows, key=itemgetter('id','name'))
print(rows_by_id_name)
如果排序的不是列表中元素不是字典,而是一个自定义对象,根据对象的属性进行排序,同理。
使用 operator .attrgetter
from operator import attrgetter
class User:
def __init__(self, user_id):
self.user_id = user_id
def __repr__(self):
return 'User({})'.format(self.user_id)
def sort_notcompare():
users = [User(23), User(3), User(99)]
# print(users)
# print(sorted(users, key=lambda u: u.user_id))
print(users)
print(sorted(users, key=attrgetter('user_id')))
if __name__ == "__main__":
sort_notcompare()