2013-04-13 10 views
6

, że nie mogło być strukturyzacji słownika w pytona których klucze są pary min/max wartości pomiędzy 0 i 1, na przykład:klucze Pythonowego słownika jako zestawu liczb

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

ja jak się możliwość wywoływania wpisów w słowniku o numerze w ciągu zestawu [min, maks.].

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

Czuję, że może być ładny, prosty sposób na zrobienie tego. Jest to jednak nieuchwytne, ponieważ wciąż jestem w pieluchach Pythona.

Odpowiedz

11

Zakładając interwały nie pokrywają się, nie ma żadnych luk i są one klasyfikowane użyć binarne wyszukiwania:

>>> 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' 
Powiązane problemy