def expand(d,level):#,nrows=nrows,ncols=ncols): #self.debug('\texpand(%s(%s),%s)'%(type(d),d,level)) for k,v in sorted(d.items() if hasattr(d,'items') else d): zero = data['nrows'] data[(data['nrows'],level)] = k if fun.isDictionary(v): data['ncols']+=1 expand(v,level+1) else: if not fun.isSequence(v): v = [v] for t in v: data[(data['nrows'],level+1)] = t data['nrows']+=1
def dict2array(dct): """ Converts a dictionary in a table showing nested data, lists are unnested columns """ data,table = {},[] data['nrows'],data['ncols'] = 0,2 if fun.isDictionary(dct) else 1 def expand(d,level):#,nrows=nrows,ncols=ncols): #self.debug('\texpand(%s(%s),%s)'%(type(d),d,level)) for k,v in sorted(d.items() if hasattr(d,'items') else d): zero = data['nrows'] data[(data['nrows'],level)] = k if fun.isDictionary(v): data['ncols']+=1 expand(v,level+1) else: if not fun.isSequence(v): v = [v] for t in v: data[(data['nrows'],level+1)] = t data['nrows']+=1 #for i in range(zero+1,nrows): data[(i,level)] = None expand(dct,0) [table.append([]) for r in range(data.pop('nrows'))] [table[r].append(None) for c in range(data.pop('ncols')) for r in range(len(table))] for coord,value in data.items(): table[coord[0]][coord[1]] = value return table