欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

itertools.groupby()分组字典列表

程序员文章站 2022-06-01 19:39:40
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).