仿内置用法 按key分组成嵌套字典,key嵌套,在日常开发中,基本会遇到
仿内置用法 按key分组成嵌套字典,key嵌套,在日常开发中,基本会遇到
在日常开发中,基本会遇到有如下需求,一个序列中,先按a属性的值分组 , 把值和值一样的对象列表 做映射,生成一个字典,然后再对该字典的values()[list,list,...] 中的每一个 list 再按属性b分组,递归下去。
比如一个序列的每个对象都是描述数据库中的列的信息 column,有属性dbname,tablename,columnname等信息。
先按照dbname得到 一个字典:{dbname1:[column,...],dbname2:[column,...]}
再按照tablename分组,得到一个嵌套的字典,{dbname:{tablename:[column,...],tablename2:[column,...]}
,dbname2:{tablename:[column,...],tablename2:[column,...]}}
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#该片段来自于http://byrx.net
相关内容
- webpy的form 元素radio单选框bug修复,webpyradio,class Radio(
- 用Python生成目录树,Python生成目录树,[Python]代码#
- Inverse power method applied to a tridiagonal matrix in Python,inve
- 把图片列表合成一个GIF动画图片,图片列表gif动画,[P
- 用Python写个翻译工具,Python写翻译工具,[Python]代码
- python中使用sharp模块的简单范例,pythonsharp,from shapes
- 输入地名获得当地天气预报,地名当地天气预报,weath
- python根据月份和日得到星座,python星座,#计算星座def
- python获取图片的颜色信息,,image = Imag
- python中使用sorted函数对列表进行排序,pythonsorted,#创建
评论关闭