def infer_collection(d): if is_list(type(d)): return d cands = [] for k, v in d.iteritems(): tv = type(v) if is_ordered(tv): if is_list(tv) and len(v) > 0 and is_dict(type(v[0])): cands.append(v) elif is_dict(tv): infer_collection_dict_helper(v, cands) if len(cands) > 0: return sorted(map(lambda c: (c, relsize(c)), cands), key=itemgetter(1), reverse=True)[0][0] else: return []
def infer_collection_dict_helper(d, cands): for k, vd in d.iteritems(): tv = type(vd) if is_ordered(tv): if is_list(tv) and is_dict(type(vd[0])): cands.append(vd) else: infer_collection_ordered_helper(vd, cands) elif is_dict(tv): infer_collection_dict_helper(vd, cands)
def infer_collection_ordered_helper(l, cands): for vo in l: tv = type(vo) if is_ordered(tv): if is_list(vo) and is_dict(type(v[0])): cands.append(vo) else: infer_collection_ordered_helper(vo, cands) elif is_dict(tv): infer_collection_dict_helper(vo, cands)