• 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))
  • 相关阅读:
    java中public、private、protected区别
    Java构造函数
    吸血鬼数字算法
    JsonConvert.DeserializeObject<T>对象属性为空
    vs2015项目引用其他项目无法引用
    iis express 无法访问此网站
    c#Dictionary保存不同类型
    HttpContext.GetOwinContext().Authentication 报错 解决办法
    CSS基础1
    CSS基础3
  • 原文地址:https://www.cnblogs.com/liang715200/p/14842751.html
Copyright © 2020-2023  润新知