zoukankan      html  css  js  c++  java
  • 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). 

  • 相关阅读:
    0302思考并回答一些问题
    1231 实验四 递归下降语法分析程序设计
    1118 实验三 有限自动机的构造与识别
    1112对他人的博客评论及建议
    1029c语言文法
    1022词法分析实验总结
    词法分析
    0330 复利计算——单元测试
    0321 读《构建之法》第一,二,三章有感
    0316 复利计算总结(0330 更新)
  • 原文地址:https://www.cnblogs.com/hycstar/p/9348644.html
Copyright © 2011-2022 走看看