oo: { 'a':3, 'b':5, 'c':2 } accumDict(oo): { 'a':3, 'b':8, 'c':10 } fallInDict(0, oo)=0 fallInDict(1, oo)=0 fallInDict(2, oo)=0 fallInDict(3, oo)=0 fallInDict(4, oo)=1 fallInDict(5, oo)=1 fallInDict(6, oo)=1 fallI
(val, aDict, baseValue=0)
| 141 | #======================================================================== |
| 142 | |
| 143 | def fallInDict(val, aDict, baseValue=0): |
| 144 | ''' |
| 145 | oo: |
| 146 | { |
| 147 | 'a':3, |
| 148 | 'b':5, |
| 149 | 'c':2 |
| 150 | } |
| 151 | accumDict(oo): |
| 152 | { |
| 153 | 'a':3, |
| 154 | 'b':8, |
| 155 | 'c':10 |
| 156 | } |
| 157 | fallInDict(0, oo)=0 |
| 158 | fallInDict(1, oo)=0 |
| 159 | fallInDict(2, oo)=0 |
| 160 | fallInDict(3, oo)=0 |
| 161 | fallInDict(4, oo)=1 |
| 162 | fallInDict(5, oo)=1 |
| 163 | fallInDict(6, oo)=1 |
| 164 | fallInDict(7, oo)=1 |
| 165 | fallInDict(8, oo)=1 |
| 166 | fallInDict(9, oo)=2 |
| 167 | fallInDict(10, oo)=2 |
| 168 | |
| 169 | When val out of range: |
| 170 | |
| 171 | fallInDict(-1, oo)= -1 |
| 172 | fallInDict(11, oo)= -2 |
| 173 | fallInDict(12, oo)= -2 |
| 174 | ''' |
| 175 | |
| 176 | if val<baseValue: return -1 |
| 177 | acd = accumDict(aDict) |
| 178 | if val>acd.values()[-1]: return -2 |
| 179 | |
| 180 | ra = range(len(acd)) |
| 181 | |
| 182 | for i in ra: |
| 183 | vInDict = acd.values()[i] |
| 184 | if val <= vInDict: break |
| 185 | |
| 186 | return aDict.keys()[i] |
| 187 | |
| 188 | #======================================================================== |
| 189 |