Bengt Richter wrote: > then there's always > > if 'x' in d: value = d['x'] > else: value = bsf() > > or > > try: value = d['x'] > except KeyError: value = bsf() >
Its worth remembering that the first of those two suggestions is also faster than using get, so you aren't losing on speed if you write the code out in full: choose whichever seems clearest and uses the least contorted code. (The second is the fastest of all if the value is found, but a lot slower if the exception gets thrown.) C:\Python24\Lib>timeit.py -s "d={}" -s "for k in range(1000): d['x%s'%k]=k" "value = d.get('x45', 'notfound')" 1000000 loops, best of 3: 0.427 usec per loop C:\Python24\Lib>timeit.py -s "d={}" -s "for k in range(1000): d['x%s'%k]=k" "value = d.get('z45', 'notfound')" 1000000 loops, best of 3: 0.389 usec per loop C:\Python24\Lib>timeit.py -s "d={}" -s "for k in range(1000): d['x%s'%k]=k" "if 'x45' in d: value=d['x45']" "else: value='notfound'" 1000000 loops, best of 3: 0.259 usec per loop C:\Python24\Lib>timeit.py -s "d={}" -s "for k in range(1000): d['x%s'%k]=k" "if 'z45' in d: value=d['z45']" "else: value='notfound'" 1000000 loops, best of 3: 0.131 usec per loop C:\Python24\Lib>timeit.py -s "d={}" -s "for k in range(1000): d['x%s'%k]=k" "try: value=d['x45']" "except: value='notfound'" 1000000 loops, best of 3: 0.158 usec per loop C:\Python24\Lib>timeit.py -s "d={}" -s "for k in range(1000): d['x%s'%k]=k" "try: value=d['z45']" "except: value='notfound'" 100000 loops, best of 3: 2.71 usec per loop -- http://mail.python.org/mailman/listinfo/python-list