get_next, get_prev, in Python OrderedDict Aug 2018

Example class based on an OrderedDict

I provide an example class based on an OrderedDict — with an adjunct dictionary to index to the next and prev OrderedDict entry. In my case, I have a rather static OrderedDict: it is a dictionary of AISC shape objects. The function set_prev_next() must be called after each operation that modifies OrderedDict.

class MyClass(coll.OrderedDict): 
    mynpdict = {}
    
    def __getitem__(self, key):
        blah
        blah
        return coll.OrderedDict.__getitem__(self, key)

    def set_prev_next(self):
        # build a next/prev dict so that we may access previous shape and next shape
        # mynpdict is the dict we are building
        
        currp = curr = currn = None
        
        for e in self:
            self.mynpdict[curr] = (currp, currn)
            currp, curr, currn = curr, currn, e

        # now get the last entry in the OrderedDict
        # tuple will be (prev, next)
        self.mynpdict[curr] = (currp, currn)

    def get_prev(self, q):
        # tuple from dict mynpdict[q.upper()] is (prev, next) 
        # so [0] is the index for prev
        # so [1] is the index for next
        # upper(), because, in my case, the keys are all caps
        
        try:
            qn = self[self.mynpdict[q.upper()][0]]
        except:
            qn = None
        return qn

    def get_next(self, q):
        # tuple from dict mynpdict[q.upper()] is (prev, next) 
        # so [0] is the index for prev
        # so [1] is the index for next
        # upper(), because, in my case, the keys are all caps
        
        try:
            qn = self[self.mynpdict[q.upper()][1]]
        except:
            qn = None
        return qn

https://stackoverflow.com/questions/12328184/how-to-get-the-next-item-in-an-ordereddict#12329591

Leave a Reply

Your email address will not be published. Required fields are marked *