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

AltStyle によって変換されたページ (->オリジナル) /