Inverse of dict(zip(x,y))

Carl Banks pavlovevidence at gmail.com
Thu Mar 5 22:04:54 CET 2009


On Mar 5, 9:01 am, Tino Wildenhain <t... at wildenhain.de> wrote:
> Piet van Oostrum wrote:
> >>>>>> Andre Engels <andreeng... at gmail.com> (AE) wrote:
>
> >> AE> On Wed, Mar 4, 2009 at 11:02 AM, lone_eagle <icym... at gmail.com> wrote:
> >>>> Can someone suggest a easy method to do the inverse of dict(zip(x,y))
> >>>> to get two lists x and y?
>
> >>>> So, if x and y are two lists, it is easier to make a dictionary using
> >>>> d = dict(zip(x,y)), but if I have d of the form, d = {x1:y1,
> >>>> x2:y2, ...}, what is there any trick to get lists x = [x1, x2, ...]
> >>>> and y = [y1, y2, ...]
>
> >> AE> x = d.keys()
> >> AE> y = [d[e] for d in x]
>
> >> AE> y = d.values() might also work, but I am not sure whether d.keys() and
> >> AE> d.values() are guaranteed to use the same order.
>
> > Yes, they are if the dictionary is not changed in the meantime (not even
> > inserting and removing the same thing). See the library documentation,
> > section dict.
>
> Still I'd like to see an application where this really matters (that
> keys() and values() match in order)


Just as an example, if you are using a third-party library function
that demands side-by-side inputs in respective lists, you could make
use of it.  That's not a good interface, IMHO, but if you have to use
such a library, and you want to supply key-value pairs, then you can
use keys and values seperately.

populate_database(d.keys(),d.values())



Carl Banks



More information about the Python-list mailing list