default value for list access?

Bo Peng bpeng at rice.edu
Sun Feb 27 15:03:26 EST 2005


To clearify the problem:

The data is the count of something, for example a[90]=10. a may be a 
dictionary if the range is huge and a list when the range is reasonably 
small. In the dictionary case, I can use a.setdefault(80, 0) if key 80 
does not exist. In the list case, I have to check the length of list 
before I access it (or use exception).

This becomes troublesome when I need to do the following a lot.

   b = a[80][1] + a[80][2] + a[80][3]

If I use the getItem function in my previous email, it will look like

   b = getItem(getItem(a, 80, []), 1, 0) + getItem(getItem(a, 80, []), 
2, 0) + getItem(getItem(a, 80, []), 3, 0)

What would be the best solution to handle this? Something like

   b = df( a[80][1], 0) + df( a[80][2], 0) + df( a[80][3], 0)

would be reasonable but df can not be easily defined since the exception 
will be raised before function df is called. Something like

   b = df( a, [80, 1], 0) + df( a, [80,2], 0) + df( a, [80, 3], 0)

would work if df is defined as

def df(a, idx, default):
   try:
     for i in range(0, idx):
       a = a[ idx[i] ]
     return a
   except:
     return 0

but I am afraid that a for loop would bring serious performance problem.

Thanks.

Bo



More information about the Python-list mailing list