Python 列表内置 list.sort() 方法实现原地排序,同时 Python 还提供 sorted() 函数返回对可迭代对象排序后的新列表。
首先导入可能需要的模块:
# coding:utf-8
import operator
import collections
数据和排序,列表中存储的是字典:
data_list = []
data_list.append({'id':'1','name':'zhangsan','age':'22'})
data_list.append({'id':'2','name':'wangwu','age':'23'})
data_list.append({'id':'7','name':'张三','age':'22'})
data_list.append({'id':'4','name':'李四','age':'21'})
data_list.append({'id':'3','name':'肖战','age':'23'})
data_list.append({'id':'5','name':'无视','age':'21'})
data_list.append({'id':'6','name':'排查','age':'23'})
'''先按照id排序,再按照age排序'''
data_list.sort(key=lambda obj:(obj.get('id'),obj.get('age')), reverse=False)
for s in data_list:
print(s)
列表中存储的是元组:
L = [('b', 6), ('a', 1), ('c', 3), ('d', 4)]
L.sort(key=lambda x:x[1])
print(L)
多关键字排序:
L.sort(key=lambda x: (x[1], x[0]))
print(L)
使用sorted()排序:
aa=sorted(L,key=lambda x: (x[1], x[0]))
print(aa)
使用operator排序:
L.sort(key=operator.itemgetter(1, 0))
print(L)
列表中存储的是对象的时候的排序:
class Student(object):
def __init__(self,id,name,age):
self.id=id
self.name=name
self.age=age
list=[]
s1=Student(1,'zhangsan',23)
s2=Student(2,'wangwu',32)
s3=Student(3,'lisi',21)
s4=Student(3,'lisi',20)
list.append(s1)
list.append(s2)
list.append(s3)
list.append(s4)
list.sort(key=operator.attrgetter('id','age'))
for ssss in list:
print('id: '+str(ssss.id)+' name: '+ssss.name+" age: "+str(ssss.age))
字典排序,按照值排序注意值得类型。
dict2={'id':'1','name':'zhangsan','age':'23'}
'''按键排序:sorted(dict2.items(), key=lambda e:e[0], reverse=True)
按键排序:sorted(dict2.items(), key=lambda e:e[1], reverse=True)
'''
sorted(dict2.items(), key=lambda e:e[1], reverse=True)
print(dict2)