`

python 多次分组 group by 嵌套字典(nested dict)

阅读更多
需求:在日常开发中,经常会遇到对某一可迭代序列多维度分组,得到按照维度先后的嵌套字典,例如,得到整个MySQL的information_schema.columns表中的所有数据,像动态生成和表对应的类,简化持久化的操作。之中就需要对每个columns里的数据进行db和table两个维度分组,把在同db且同table的数据组合在一起。


举个更简单的例子:

itertools.permutations(range(4), 3)  # 0,1,2三个数字排列组合


现在需要把组合中第一位一样的数据分组后,再把得到的结果中第三位一样的数据再分组,得到嵌套的字典。

直接给出解决方案:

def group2nesteddict(iterable, keys, idx=0):
    ''' group iterable to nested dict by keys ,
        nested deep depend keys length
    
    @param keys: functions for group 
    @return: defaultdict 
    
    >>> import itertools
    >>> group2nesteddict(itertools.permutations(range(4), 3), [lambda x:x[0], lambda x:x[2]])
    defaultdict(<type 'list'>
    , {0: defaultdict(<type 'list'>,{1: [(0, 2, 1), (0, 3, 1)]
                                    , 2: [(0, 1, 2), (0, 3, 2)]
                                    , 3: [(0, 1, 3), (0, 2, 3)]}), 
        1: defaultdict(<type 'list'>,{0: [(1, 2, 0), (1, 3, 0)]
                                    , 2: [(1, 0, 2), (1, 3, 2)]
                                    , 3: [(1, 0, 3), (1, 2, 3)]}), 
        2: defaultdict(<type 'list'>,{0: [(2, 1, 0), (2, 3, 0)]
                                     , 1: [(2, 0, 1), (2, 3, 1)]
                                     , 3: [(2, 0, 3), (2, 1, 3)]}), 
        3: defaultdict(<type 'list'>,{0: [(3, 1, 0), (3, 2, 0)]
                                     , 1: [(3, 0, 1), (3, 2, 1)]
                                     , 2: [(3, 0, 2), (3, 1, 2)]})})
    '''
    
    x = reduce(lambda d, x:d.append_2_value_collection(keys[idx](x), x), iterable, GroupDict())
    if idx != len(keys) - 1:
        for k, v in x.items():
            x[k] = group2nesteddict(v, keys, idx + 1)
    return x


GroupDict 请关注本博客:python 可分组字典





分享到:
评论

相关推荐

    Python-嵌套字典构造与调用的相关功能

    以上就是关于Python嵌套字典构造与调用的相关功能的详细介绍,通过理解并熟练运用这些知识,可以更好地处理复杂、多层次的数据结构。在实际项目中,嵌套字典是解决许多问题的有效工具,尤其是在数据处理、配置管理...

    python爬虫学习案例-.字典中的字典遍历.rar

    在Python中,字典是一种非常灵活的数据结构,它允许我们将键(key)与值(value)关联起来,而当字典的值又是一个字典时,我们称之为嵌套字典。 字典遍历的基本方法有多种,包括简单的迭代、递归以及使用内置的`...

    python入门-26-列表嵌套.ev4.rar

    1. **创建嵌套列表**:在Python中,你可以通过将一个或多个列表作为元素放入另一个列表来创建嵌套列表。例如: ```python list1 = [1, 2, 3] list2 = ['a', 'b', 'c'] nested_list = [list1, list2] ``` 这里...

    Python库 | nested-dictionaries-0.0.1.tar.gz

    "nested-dictionaries-0.0.1.tar.gz" 是一个针对Python的库,专门处理嵌套字典的工具,其版本号为0.0.1,以tar.gz格式压缩打包。 嵌套字典是Python字典数据结构的一个扩展,允许在一个字典中包含其他字典,形成多层...

    头歌python元组与字典通关代码

    在这些Python编程挑战中,我们主要涉及了四个核心知识点:元组、字典、字典的遍历以及嵌套数据结构。以下是关于这些知识点的详细说明: 1. **元组(Tuples)**: 元组是Python中的不可变序列类型,一旦创建就不能...

    学学Python_字符串09_字典的方法02 copy方法

    在Python编程语言中,字典(Dictionary)是一种非常重要的数据结构,它以键值对的形式存储数据,提供了高效且灵活的查找和操作机制。本文主要关注的是字典的一个特定方法——`copy()`,该方法用于创建字典的一个副本...

    Python库 | bamboo-nested-0.0.4.tar.gz

    Python的内置数据结构如列表(list)、元组(tuple)、字典(dict)和集合(set)是编程的基础。字典尤其适合处理嵌套数据,因为它允许通过键值对进行访问。如果"bamboo-nested"库旨在操作字典,那么它可能包含以下...

    最聪明的:明智的嵌套字典和python列表

    一、嵌套字典(Nested Dictionaries) 1. **定义**:嵌套字典是指一个字典的值本身也是一个字典,可以形成多层的结构。这种结构在处理层次化数据时非常有用,如JSON对象或XML文档。 2. **访问**:通过键的链式引用...

    nested-lookup:用于处理深层嵌套文档(列表和字典)的Python函数

    nested_lookup包提供了许多Python函数,用于处理深层嵌套的文档。 在这种情况下,文档是Python字典和通常从YAML或JSON派生的列表对象的混合体。 nested_lookup: 在深层嵌套的文档上执行键查找。 返回匹配值的...

    Python库 | drf-writable-nested-0.1.2.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:drf-writable-nested-0.1.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | drf-nested-resources-1.2b2.tar.gz

    本篇文章将深入探讨一个特定的Python库——`drf-nested-resources`,版本1.2b2,它是一个用于Django REST Framework(DRF)的强大工具,旨在处理嵌套资源的序列化和反序列化,从而提升API设计的灵活性和效率。...

    Pure Python,MIT 许可的嵌套采样算法实现,用于评估贝叶斯证据_python_代码_下载

    嵌套采样(Nested Sampling)是一种统计方法,用于在高维空间中计算复杂概率分布的积分,特别是用于贝叶斯模型比较中的贝叶斯证据(Bayesian Evidence)。在这个上下文中,"Pure Python,MIT 许可的嵌套采样算法实现...

    list嵌套list例子

    总之,列表嵌套列表是Python中处理复杂数据结构的有效手段,广泛应用于数据处理、算法实现和事件驱动编程等多个领域。理解和熟练掌握嵌套列表的操作,对于提高编程效率和代码质量至关重要。在实际编程中,要根据具体...

    Python库 | drf_nested_forms-1.0.0.tar.gz

    `drf_nested_forms` 是一个专门针对Python的Django Rest Framework (DRF) 扩展库,用于处理嵌套表单(nested forms)的问题。在Web开发中,特别是在使用RESTful API时,处理复杂的嵌套数据结构是一个常见的挑战。这个...

    Python-TraversablePythonDictionaries

    首先,Python字典的创建非常简单,可以通过大括号{}或者dict()函数来完成。例如: ```python my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'} ``` 字典的每个键都是唯一的,且必须是不可变类型,如字符...

    Nested array.rar_arrays DOA_nested-array_nested_array_嵌套_嵌套阵列doa

    嵌套阵列DOA估计matlab例程,基于Nested Arrays A Novel Approach to Array Processing With Enhanced Degrees of Freedom。

    Python库 | nested_models-0.1.0-py2-none-any.whl

    `nested_models`库很可能是一个专门处理嵌套数据结构的模块,如嵌套的字典、列表或者其他复杂的对象结构。在Python中,处理这样的数据结构有时会变得复杂,特别是在进行序列化、反序列化或者数据验证时。这个库可能...

    python字典多键值及重复键值的使用方法(详解)

    总的来说,Python字典提供了灵活的数据存储方式,可以通过键值对、多键值对、多值和嵌套数据结构来适应各种需求。理解这些概念对于编写高效的Python代码至关重要。在实际应用中,合理利用这些特性可以大大提高代码的...

    dotty_dict:字典包装器,用于快速访问深层嵌套的键

    python字典和字典类似对象的简单包装器 具有相同dict的两个包装器被认为是相等的 使用点表示法访问深度嵌套的键: dot['deeply.nested.key'] 创建,读取,更新和删除任意长度的嵌套键 公开所有字典方法,例如.get ...

    scalpl:轻巧的包装器,可无缝处理嵌套字典。 :OK_hand:

    好处有很多很好的库可用于嵌套字典,例如Addict或Box ,但是如果您尝试一下Scalpl ,则会发现它: :rocket: 强大的标准dict API :high_voltage: 轻的 :OK_hand: 经过良好测试 安装Scalpl是一个Python3库,您可以...

Global site tag (gtag.js) - Google Analytics