Changeset 7863:ecc8bd83cea2 in orange


Ignore:
Timestamp:
04/18/11 15:43:33 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
8516bb7ca617055d5031d7c7a0a167ea8758596a
Message:

Fixed a bug in getitem. contains is now log(n) operation, speedup of get method.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/Orange/misc/collections.py

    r7811 r7863  
    5454         
    5555    def __setitem__(self, key, value): 
    56         i = bisect.bisect_left(self._value_array, key) 
     56        i = bisect.bisect_left(self._key_array, key) 
    5757        if i == len(self._key_array): 
    5858            self._key_array.insert(i, key) 
     
    8383     
    8484    def get(self, key, default=None): 
    85         try: 
    86             return self.__getitem__(key) 
    87         except KeyError: 
     85        i = bisect.bisect_left(self._key_array, key) 
     86        if i == len(self._key_array): 
     87            return default 
     88        elif self._key_array[i] == key: 
     89            return self._value_array[i] 
     90        else: 
    8891            return default 
    8992         
     
    97100        return len(self._key_array) 
    98101     
     102    def __iter__(self): 
     103        return self.iterkeys() 
     104     
    99105    def __contains__(self, key): 
    100         return key in self.keys() 
     106        i = bisect.bisect_left(self._key_array, key) 
     107        if i == len(self._key_array) or self._key_array[i] != key: 
     108            return False 
     109        else: 
     110            return True 
    101111     
    102112    def __delitem__(self, key): 
     
    110120        """ 
    111121        return dict(self.iteritems()) 
     122     
    112123    def __repr__(self): 
    113124        return "TypedDict({0!r})".format(self.todict()) 
Note: See TracChangeset for help on using the changeset viewer.