[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Write this accumuator in a functional style

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:

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".

Help me humour my colleague.