Busqueda Parcial con Tuplas como Clave de Diccionario

Arnau Sanchez arnau en ehas.org
Vie Jul 21 12:19:07 CEST 2006


Alejandro,

Primero, tu bucle quedaría mucho más compacto usando una list comprehension:

dAux = {}
for lx in l:
	dAux[lx] = [d[x] for x in d if lx in x]

En cuanto a velocidad, seguramente así vaya un poco más rápido, pero la 
diferencia no será sustancial. Si quieres que realmente vaya mucho más rápido, 
tendrías que generar estructuras auxiliares antes de la búsqueda. Por ejemplo, 
podrías generar este diccionario:

de {('a', 'b'): ['1', '2', '3']} ...

podrías sacar {'a': ['1', '2', '3']  'b': ['1', '2', '3'] ... }

y luego, al recorrer este diccionario la búsqueda sería seguro mucho más ágil.

La forma de encarar el problema depende de muchas cosas, de la naturaleza de los 
datos, cuándo los obtienes, si estos se van modificando o son estáticos, etc. 
Pero al final, la idea es básicamente la misma, trata tus datos antes de entrar 
en el algoritmo de búsqueda.

nos cuentas

arnau


Alejandro Novo escribió:
> Buenos días,
> 
> en mi caso tengo una lista y un diccionario, donde el diccionario tiene 
> como
> claves una tupla. Cada tupla solo tiene un elemento relevante para mi
> búsqueda (el 2º como podéis ver en la lista ejemplo) y lo que necesito es
> recorrer el diccionario y recoger todos los valores donde el elemento de mi
> lista inicial aparezca en la clave. Por ejemplo:
> 
> d = {('a', 'b'): ['1', '2', '3'], ('e', 'f'): ['8', '9', '10'], ('z', 'f'):
> ['11', '12', '13'], ('c', 'd'): ['5', '6', '7']}
> l = ['b', 'd', 'f']
> 
> for elem in d:
>    for elem2 in l:
>        if elem2 in elem:
>            if elem2 not in dAux:
>                dAux[elem2]=[]
>                dAux[elem2].append(d[elem])
>            else:
>                dAux[elem2].append(d[elem])
> 
> Lo que me revolvería lo que busco:
> 
> dAux = {'b': [['1', '2', '3']], 'd': [['5', '6', '7']], 'f': [['8', '9',
> '10'], ['11', '12', '13']]}
> 
> Pero esta forma es lentísima para mi caso, donde los diccionarios son de
> tamaño considerable, así como la lista.
> 
> Muchas gracias de antemano.
> 
> Un saludo.
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
> 
> 




Más información sobre la lista de distribución Python-es