On Tue, Jul 11, 2017 at 4:11 PM, Steven D'Aprano <st...@pearwood.info> wrote: > I have a colleague who is allergic to mutating data structures. Yeah, I > know, he needs to just HTFU but I thought I'd humour him. > > Suppose I have an iterator that yields named tuples: > > Parrot(colour='blue', species='Norwegian', status='tired and shagged out') > > and I want to collect them by colour: > > accumulator = {'blue': [], 'green': [], 'red': []} > for parrot in parrots: > accumulator[parrot.colour].append(parrot) > > > That's pretty compact and understandable, but it require mutating a bunch > of pre-allocated lists inside an accumulator. Can we re-write this in a > functional style? > > The obvious answer is "put it inside a function, then pretend it works by > magic" but my colleague's reply to that is "Yes, but I'll know that its > actually doing mutation inside the function".
It's a partitioning filter. (Three way, not the usual two, but same same.) I've actually often wanted a quick way to write that - where you divide a list into two according to "passes predicate" vs "fails predicate". So if you find a really nice solution, I'm interested. ChrisA -- https://mail.python.org/mailman/listinfo/python-list