itertools.groupby()分组字典列表

## 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). 

原文地址:https://www.cnblogs.com/hycstar/p/9348644.html