One-liner to merge lists?

Chris Angelico rosuav at gmail.com
Tue Feb 22 04:30:13 EST 2022


On Tue, 22 Feb 2022 at 20:24, Frank Millman <frank at chagford.com> wrote:
>
> Hi all
>
> I think this should be a simple one-liner, but I cannot figure it out.
>
> I have a dictionary with a number of keys, where each value is a single
> list -
>
>  >>> d = {1: ['aaa', 'bbb', 'ccc'], 2: ['fff', 'ggg']}
>
> I want to combine all values into a single list -
>
>  >>> ans = ['aaa', 'bbb', 'ccc', 'fff', 'ggg']
>
> I can do this -
>
>  >>> a = []
>  >>> for v in d.values():
> ...   a.extend(v)
> ...
>  >>> a
> ['aaa', 'bbb', 'ccc', 'fff', 'ggg']
>
> I can also do this -
>
>  >>> from itertools import chain
>  >>> a = list(chain(*d.values()))
>  >>> a
> ['aaa', 'bbb', 'ccc', 'fff', 'ggg']
>  >>>
>
> Is there a simpler way?
>

itertools.chain is a good option, as it scales well to arbitrary
numbers of lists (and you're guaranteed to iterate over them all just
once as you construct the list). But if you know that the lists aren't
too large or too numerous, here's another method that works:

>>> sum(d.values(), [])
['aaa', 'bbb', 'ccc', 'fff', 'ggg']

It's simply adding all the lists together, though you have to tell it
that you don't want a numeric summation.

ChrisA


More information about the Python-list mailing list