仿内置用法 按key分组成嵌套字典,key嵌套,[Python]代码it


[Python]代码

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

评论关闭