itertools.groupby()分组字典列表
程序员文章站
2023-08-18 14:39:50
groupby()函数同时返回分组关键字和一个与关键字相对应的可迭代对象,也可以使用defaultdict()创建一个一对多字典方便进行随机访问 ......
## itertools.groupby()分组字典列表数据
1 from operator import itemgetter 2 from itertools import groupby 3 4 5 students = [ 6 {'name': 'Peter', 'age': 19, 'score': 95}, 7 {'name': 'Lily', 'age': 22, 'score': 90}, 8 {'name': 'Stanley', 'age': 22, 'score': 92}, 9 {'name': 'Bob', 'age': 20, 'score': 88}, 10 {'name': 'Well', 'age': 20, 'score': 82} 11 ] 12 13 for key, group in groupby(sorted(students, key=itemgetter("age")), key=itemgetter("age")): 14 # groupby()函数同时返回分组关键字和一个与关键字相对应的可迭代对象 15 # itemgetter()同样可以接收多个关键字,也可以使用匿名函数代替此函数,但速度相比之下较慢 16 print("Age: %s" % key) 17 for g in group: 18 print(g) 19 """ 20 Age: 19 21 {'name': 'Peter', 'age': 19, 'score': 95} 22 Age: 20 23 {'name': 'Bob', 'age': 20, 'score': 88} 24 {'name': 'Well', 'age': 20, 'score': 82} 25 Age: 22 26 {'name': 'Lily', 'age': 22, 'score': 90} 27 {'name': 'Stanley', 'age': 22, 'score': 92} 28 29 """ 30 # 也可以使用defaultdict()创建一个一对多字典方便进行随机访问 31 from collections import defaultdict 32 33 34 students_by_age = defaultdict(list) 35 for key, group in groupby(sorted(students, key=itemgetter("age")), key=itemgetter("age")): 36 for i in group: 37 students_by_age[key].append(i) 38 39 print(list(students_by_age[22])) 40 # [{'name': 'Lily', 'age': 22, 'score': 90}, {'name': 'Stanley', 'age': 22, 'score': 92}]
参考资料:
Python Cookbook, 3rd edition, by David Beazley and Brian K. Jones (O’Reilly).