How to do an 'inner join' with dictionaries

Tim Chase python.list at tim.thechases.com
Mon Feb 27 03:03:38 EST 2006


> Let's say I have two dictionaries:
> dict1 is  1:23,  2:76,  4:56
> dict2 is  23:A, 76:B,  56:C
> 
> How do I get a dictionary that is
> 1:A, 2:B, 4:C

 >>> d1={1:23,2:76,4:56}
 >>> d2={23:"a", 76:"b", 56:"c"}
 >>> result = dict([(d1k,d2[d1v]) for (d1k, d1v) in d1.items()])
 >>> result
{1: 'a', 2: 'b', 4: 'c'}



If you don't know that all the values in d1 will be in d2,

 >>> d1[5]=444
 >>> d2[333]='qqq'

you can put in a "if" check like

 >>> result = dict([(d1k,d2[d1v]) for (d1k, d1v) in 
d1.items() if d1v in d2])
{1: 'a', 2: 'b', 4: 'c'}

(using "d1v" for "dictionary1's value" and "d1k" for 
"dictionary1's key")

HTH,

-tkc







More information about the Python-list mailing list