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))
  • 相关阅读:
    Eclipse插件
    Android res文件夹下新建layout文件夹出错:invalid resource directory name
    Java笔记一:斐波那契数列
    Android应用的启动界面
    android短信系列之实现发送短信,并获得发送报告与接收报告
    转:android 使用html5作布局文件
    ubuntu10.10 全自动安装微软雅黑字体
    gcswf32.dll已停用
    Android连接真机之中兴
    在Servlet中连接Access
  • 原文地址:https://www.cnblogs.com/liang715200/p/14842751.html
Copyright © 2011-2022 走看看