list1 =[{'spec':'D','serial_num':4,'no':'3'},{'spec':'B','serial_num':3,'no':'2'},{'spec':'C','serial_num':1,'no':'4'},{'spec':'A','serial_num':2,'no':'1'},]deffunc(h):if h['serial_num']>2:return'大'else:return'小'for k, value in groupby(list1, key=func):print(k)print(list(value))# 结果比较有意思如下
大
[{'spec':'D','serial_num':4,'no':'3'},{'spec':'B','serial_num':3,'no':'2'}]
小
[{'spec':'C','serial_num':1,'no':'4'},{'spec':'A','serial_num':2,'no':'1'}]
写一段实际可能会用到的代码
from operator import itemgetter
from itertools import groupby
cage_no =[{'spec':'A','serial_num':'1','no':1},{'spec':'D','serial_num':'1','no':1},{'spec':'C','serial_num':'3','no':4},{'spec':'B','serial_num':'3','no':4},{'spec':'A','serial_num':'4','no':3},{'spec':'D','serial_num':'4','no':3},{'spec':'C','serial_num':'2','no':2},{'spec':'B','serial_num':'2','no':2},{'spec':'A','serial_num':'4','no':4},{'spec':'D','serial_num':'4','no':4},{'spec':'C','serial_num':'1','no':3},{'spec':'B','serial_num':'1','no':3},{'spec':'A','serial_num':'2','no':1},{'spec':'D','serial_num':'2','no':1},{'spec':'C','serial_num':'3','no':2},{'spec':'B','serial_num':'3','no':2},]
cage_no1 =sorted(cage_no, key=itemgetter('spec','serial_num','no'))print(cage_no1)# 这个可能可以满足部分需求, 在不需要操作key的情况下print('*'*30)# itemgetter和groupby结合使用的代码
cage_no.sort(key=itemgetter('spec'))for k, v in groupby(cage_no, itemgetter('spec')):# print(k)# print(list(v))
cage =list(v)
cage.sort(key=itemgetter('serial_num'))for key, value in groupby(cage, itemgetter('serial_num')):# print(key)# print(list(value))
ca =list(value)
ca.sort(key=itemgetter('no'))for ke, va in groupby(ca, itemgetter('no')):print(ke)print(list(va))# 感兴趣的跑跑看吧