2013-04-13 15 views
6

Vorrei strutturare un dizionario in pitone cui chiavi sono coppie di valori min/max tra 0 e 1. Per esempio:chiavi del dizionario Python come insieme di numeri

myDict = {(0, .5): 'red', (.5, 1): 'orange'} 

Vorrei essere in grado di chiamare voci nel dizionario con un numero all'interno di il set [min, max).

>>> myDict[.464897] 
'red' 
>>> myDict[.5] 
'orange' 

Mi sembra che ci potrebbe essere un modo semplice e bello per farlo. È sfuggente, però, dato che sono ancora nei miei pannolini di pitone.

risposta

11

Supponendo che gli intervalli non si sovrappongano, non ci sono lacune e che sono ordinati si utilizza una ricerca binaria:

>>> keys = [0.5, 1] # goes from 0 to 1, specify end interval 
>>> vals = ['red', 'orange'] 
>>> import bisect 
>>> vals[bisect.bisect_right(keys, 0.464897)] 
'red' 
>>> vals[bisect.bisect_right(keys, 0.5)] 
'orange' 
Problemi correlati