mapeo inverso del diccionario con Python

Posible duplicado:
Búsqueda inversa de diccionario – Python

Si tengo un diccionario llamado ref como sigue

ref = {} ref["abc"] = "def" 

Puedo obtener “def” de “abc”

 def mapper(from): return ref[from] 

Pero, ¿cómo puedo pasar de “def” a “abc”?

 def revmapper(to): ?????? 

Si haces esto a menudo, querrás construir un diccionario inverso:

 >>> rev_ref = dict((v,k) for k,v in ref.iteritems()) >>> rev_ref {'def': 'abc'} >>> def revmapper(to): ... return rev_ref[to] 

Si es raro y no te importa si es ineficiente, haz esto:

 >>> def revmapper(to): ... for k,v in ref.iteritems(): ... if v == to: return k 

Puedes hacer un diccionario inverso:

 revdict = dict((v,k) for k,v in ref.items()) 

entonces busca lo que quieras:

 assert revdict["def"] == "abc" 

Tenga en cuenta que esto no funcionará si dos claves se asignan al mismo valor.

 dict(map( lambda a:[a[1],a[0]], d.iteritems() ))