Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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 []
Esempio n. 4
0
def group(by, key, reducer, aa, table, norm=identity, unique=True):
    if not is_ordered(type(by)):
        by = [by]
    r = {}
    for row in table.rows:
        thk = []
        for b in by:
            if b in row:
                thk.append(norm(row[b]))
            else:
                thk.append(None)
        thk = tuple(thk)
        if thk in r:
            r[thk].append(row)
        else:
            r[thk] = [row]

    answer = []
    for thk, rows in r.iteritems():
        try:
            nr = []
            for r in rows:
                if key in r:
                    nr.append(r[key])
            asv = reduce(reducer, nr)
        except:
            asv = None

        if unique:
            r = rows[0]
            r[aa] = asv
            answer.append(r)
        else:
            for r in rows:
                r[aa] = asv
                answer.append(r)

    return postcreate(data=answer)
Esempio n. 5
0
  rv = True
  if order == "asc":
    rv = False

  if count is None:
    return postcreate(data=[c for c, s in sorted(nc, key=itemgetter(1), reverse=rv)])
  else:
    return postcreate(data=[c for c, s in sorted(nc, key=itemgetter(1), reverse=rv)[:count]])


def identity(x):
  return x


def group(by, key, reducer, as, table, norm=identity, unique=True):
  if not is_ordered(type(by)):
    by = [by]
  r = {}
  for row in table.rows:
    thk = []
    for b in by:
      if b in row:
        thk.append(norm(row[b]))
      else:
        thk.append(None)
    thk = tuple(thk)
    if thk in r:
      r[thk].append(row)
    else:
      r[thk] = [row]