MRAB wrote: > On 2019-01-25 22:58, Travis Griggs wrote: >> >> grouped = reduce( >> lambda accum, each: (accum[0], >> accum[0][str(each)].append(each)), allValues, >> (defaultdict(list), None))[0] >> >> My question, only for the sake of learning python3 fu/enlightenment, is >> there a simpler way to do this with a reduce? I get there’s lots of way >> to do a groupby. The pursuit here is what’s the >> simplest/cleverest/sneakiest way to do it with reduce, especially if the >> quality that gorupfunc (str() in this example) is only called once per >> item is persevered. >> > How about this: > > grouped = lambda iterable, groupfunc: dict(reduce( > lambda accum, each: accum[groupfunc(each)].append(each) or accum, > iterable, > defaultdict(list)))
The false-expr or ret-val expression could also be spelt (false-expr, ret-val)[1] I suppose the peephole optimiser could be taught to avoid building the tuple, i. e. def thelambda(accum, each): return (accum[groupfunc(each)].append(each), accum)[1] would be compiled to def thelambda(accum, each): accum[groupfunc(each)].append(each) return accum -- https://mail.python.org/mailman/listinfo/python-list