美文网首页
将列表中嵌套的字典按照key值分组

将列表中嵌套的字典按照key值分组

作者: 葡萄柚子茶 | 来源:发表于2019-11-01 16:05 被阅读0次

    必须先将字典中的值排序,然后才能用groupby

    itemgetteroperator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些索引或键值。

    用法示例:

    from operator import itemgetter
    
    ll = [1, 2, 3]
    dd = {'name': 'mxt', 'age': 18, 'gender': 'female'}
    
    func1 = itemgetter(1)  # 定义函数,获取对象第1个域的值
    res1 = func1(ll)  # 2 <class 'int'>
    
    func2 = itemgetter(0, 2)  # 定义函数,获取对象第0个域和第2个的值
    res2 = func2(ll)  # (1, 3) <class 'tuple'>
    
    func3 = itemgetter('name')
    res3 = func3(dd)  # mxt <class 'str'>
    
    func4 = itemgetter('name', 'gender')
    res4 = func4(dd)  # ('mxt', 'female') <class 'tuple'>
    
    注意:operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。
    
    
    from itertools import groupby
    from operator import itemgetter
        # result的值
        #[{'user_name': '阿里云', 'operation_type': 'add', 'price': Decimal('1111.00'), 'date_created': datetime.datetime(2019, 10, 30, 15, 26, 52)},
        # {'user_name': '腾讯', 'operation_type': 'add', 'price': Decimal('2222.00'), 'date_created': datetime.datetime(2019, 10, 31, 13, 45, 26)},
        # {'user_name': '阿里云', 'operation_type': 'renew', 'price': Decimal('1234.00'), 'date_created': datetime.datetime(2019, 10, 16, 13, 58, 50)}]
    
        data = sorted(results, key=lambda x: x['user_name'])
    
        for vendor_name, items in groupby(data, key=itemgetter('user_name')):
            print(vendor_name, list(items))
    
    

    结果打印如下:

    腾讯 [{'user_name': '腾讯', 'operation_type': 'add', 'price': Decimal('2222.00'), 'date_created': datetime.datetime(2019, 10, 31, 13, 45, 26)}]
    阿里云 [{'user_name': '阿里云', 'operation_type': 'add', 'price': Decimal('1111.00'), 'date_created': datetime.datetime(2019, 10, 30, 15, 26, 52)}, {'user_name': '阿里云', 'operation_type': 'renew', 'price': Decimal('1234.00'), 'date_created': datetime.datetime(2019, 10, 16, 13, 58, 50)}]
    

    相关文章

      网友评论

          本文标题:将列表中嵌套的字典按照key值分组

          本文链接:https://www.haomeiwen.com/subject/xutqbctx.html