Write this accumuator in a functional style

Steven D'Aprano steve at pearwood.info
Tue Jul 11 02:11:13 EDT 2017


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


Help me humour my colleague.



-- 
Steve



More information about the Python-list mailing list