2010-07-15 4 views
11

Nel mio script costruisco un dizionario di chiavi (album) mappate ad artisti (valori) in modo da poter eseguire una rapida ricerca su ciò che gli artisti hanno realizzato quali album . Tuttavia, voglio che l'utente sia in grado di trovare tutti gli album che contengono una sottostringa. Per esempio una ricerca su "Luce" dovrebbe tornarePython: trovare una chiave (stringa) in un dizionario che contiene una sottostringa

[Light Chasers] = Cloud Cult e anche [Night Light] = Au Revoir Simone

Qual è il modo migliore per farlo? Dovrei anche usare un dizionario?

risposta

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

Ah, pensavo a qualcosa di simile, io non avrei espresso in modo elegante . Speravo segretamente che potesse esserci qualche soluzione furtiva più efficiente :) – Sushisource

+0

Se le prestazioni sono critiche, la memoria è a buon mercato e la raccolta dei record cambia solo raramente, potresti creare un altro "indice" dettato da singole parole come chiavi e lista di -albums-contenente-that-word come valori. A meno che tu non stia facendo molte ricerche e abbia una collezione di dischi davvero enorme, probabilmente non ne vale la pena. –

0

Se mai basta il primo album che contiene il testo, ecco un modo veloce:

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'