Want to reduce steps of an operation with dictionaries

Carl Banks pavlovevidence at gmail.com
Wed Oct 25 05:23:26 CEST 2006

pretoriano_2001 at hotmail.com wrote:
> Hello:
> I have next dictionaries:
> a={'a':0, 'b':1, 'c':2, 'd':3}
> b={'a':0, 'c':1, 'd':2, 'e':3}
> I want to put in a new dictionary named c all the keys that are in b
> and re-sequence the values. The result I want is:
> c={'a':0, 'c':1, 'd':2}
> How can I do this with one line of instruction?
> I attempted the next but the output is not the expected:
> c=dict([(k,v) for v,k in enumerate(a) if b.has_key(k)])
> erroneously (for me) gets:
> {'a': 0, 'c': 2, 'd': 3}

Filter first, Sort second, Enumerate third, Build Dict last:

c = dict((k,v) for (v,k) in enumerate(sorted(j for j in a if j in b)))

The inner generator you could do with sets also.

c = dict((k,v) for (v,k) in enumerate(sorted(set(a)&set(b))))

Carl Banks

More information about the Python-list mailing list