2010-07-15 12 views
11

En mi secuencia de comandos construyo un diccionario de claves (álbumes) mapeados a artistas (valores) para poder hacer una búsqueda rápida de qué artistas hicieron qué álbumes . Sin embargo, quiero que el usuario pueda encontrar todos los álbumes que contienen una subcadena. Por ejemplo, una búsqueda en "ligero" deberá volverPython: Encontrar una clave (cadena) en un diccionario que contenga una subcadena

[Light Chasers] = Cloud Cult y también [Night Light] = Au Revoir Simone

Cuál es la mejor manera de hacer esto? ¿Debería incluso estar usando un diccionario?

Respuesta

21
[(k, v) for (k, v) in D.iteritems() if 'Light' in k] 
+0

Ah, yo estaba pensando en algo como esto, me gustaría simplemente no lo he expresado de manera tan elegante . Secretamente esperaba que pudiera haber alguna solución furtiva más eficiente :) – Sushisource

+0

Si el rendimiento es crítico, la memoria es barata, y la colección de registros cambia solo en raras ocasiones, podrías construir otro dict "índice" con palabras individuales como claves y lista de -albums-containing-that-word como valores. A menos que esté haciendo muchas búsquedas y tenga una gran colección de registros, probablemente no valga la pena. –

0

Si alguna vez sólo tiene el primer disco que contiene el texto, aquí está una manera rápida:

try: 
    return ('[%s] = %s' % (k, D.get(k)) for k in D if search_string.lower().strip() in k.lower()).next() 
except StopIteration: 
    return 'No matches found' 
Cuestiones relacionadas