osdir.com


[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:
    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