• 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))
  • 相关阅读:
    JQuery上传插件Uploadify使用详解
    在ASP.NET MVC中使用带后缀的URL
    设计师必备的职业素养!
    2010年最危险的IT技术是什么?
    关于百度快照的常见问题!
    设计师提高水平秘籍
    成为优秀设计师的几大条件
    2010最值得关注的10款互联网产品
    2011年网页设计趋势!!!!
    揭开网站美丽面纱!快照(百度快照,谷歌快照)。
  • 原文地址:https://www.cnblogs.com/liang715200/p/14842751.html
Copyright © 2020-2023  润新知