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))
  • 相关阅读:
    HDU 4681 STRING dp+暴力。
    HDU 4669 Mutiples on a circle 不知道该归为哪一类。
    poj 3411 Paid Roads很水的DFS
    poj 1724 ROADS 很水的dfs
    STL学习笔记(转,还是比较全的)
    4666 Hyperspace stl
    poj3308 Paratroopers 最大流 最小点权覆盖
    poj 3114 Countries in War
    2013 Multi-University Training Contest 4 部分解题报告
    2013 Multi-University Training Contest 3 部分解题报告
  • 原文地址:https://www.cnblogs.com/liang715200/p/14842751.html
Copyright © 2011-2022 走看看