zoukankan      html  css  js  c++  java
  • Python中itemgetter和groupby连用(字典分组函数)

    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))
  • 相关阅读:
    32位和64位的区别
    Git--版本管理的使用及理解
    Maven使用详解
    记录centos7下tomcat部署war包过程
    SSM三大框架整合教程
    Mybatis 框架搭建实例
    Eclipse 出现select type (? = any character,*= any String,Tz=TimeZone)
    JDBC 操作数据库实例
    mysql 常用命令语法
    MySQL下载安装详情教程(Windows)
  • 原文地址:https://www.cnblogs.com/liang715200/p/14842751.html
Copyright © 2011-2022 走看看