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'}, ] def func(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))