# Dictionary containing numbers # # These objects are meant to be used like arrays with generalized # indices. Non-existent elements default to zero. Global operations # are addition, subtraction, and multiplication/division by a scalar. # # Written by Konrad Hinsen # last revision: 2006-10-16 # """ Dictionary storing numerical values """ class NumberDict(dict): """ Dictionary storing numerical values Constructor: NumberDict() An instance of this class acts like an array of number with generalized (non-integer) indices. A value of zero is assumed for undefined entries. NumberDict instances support addition, and subtraction with other NumberDict instances, and multiplication and division by scalars. """ def __getitem__(self, item): try: return dict.__getitem__(self, item) except KeyError: return 0 def __coerce__(self, other): if type(other) == type({}): other = NumberDict(other) return self, other def __add__(self, other): sum_dict = NumberDict() for key in self.keys(): sum_dict[key] = self[key] for key in other.keys(): sum_dict[key] = sum_dict[key] + other[key] return sum_dict def __sub__(self, other): sum_dict = NumberDict() for key in self.keys(): sum_dict[key] = self[key] for key in other.keys(): sum_dict[key] = sum_dict[key] - other[key] return sum_dict def __mul__(self, other): new = NumberDict() for key in self.keys(): new[key] = other*self[key] return new __rmul__ = __mul__ def __div__(self, other): new = NumberDict() for key in self.keys(): new[key] = self[key]/other return new