In Python, How can I get the next and previous key:value of a particular key in a dictionary?
Question: Okay, so this is a little hard to explain, but here goes:

I have a dictionary, which I'm adding content to. The content is a hashed
username (key) with an IP address (value). I was putting the hashes into an
order by running them against base 16, and then using Collection.orderedDict.
So, the dictionary looked a little like this:

    
    
    d = {'1234': '8.8.8.8', '2345':'0.0.0.0', '3213':'4.4.4.4', '4523':'1.1.1.1', '7654':'1.3.3.7', '9999':'127.0.0.1'}
    

What I needed was a mechanism that would allow me to pick one of those keys,
and get the key/value item one higher and one lower. So, for example, If I
were to pick 2345, the code would return the key:value combinations
'1234:8.8.8.8' and '3213:4.4.4.4'

So, something like:

    
    
    for i in d:
      while i < len(d)
       if i == '2345':
         print i.nextItem
         print i.previousItem
         break()
    


Answer: As seen in the [`OrderedDict` source
code](https://hg.python.org/cpython/file/2.7/Lib/collections.py#l69), if you
have a key and you want to find the next and prev in O(1) here's how you do
that.

    
    
    >>> from collections import OrderedDict
    >>> d = OrderedDict([('aaaa', 'a',), ('bbbb', 'b'), ('cccc', 'c'), ('dddd', 'd'), ('eeee', 'e'), ('ffff', 'f')])
    >>> i = 'eeee'
    >>> link_prev, link_next, key = d._OrderedDict__map['eeee']
    >>> print 'nextKey: ', link_next[2], 'prevKey: ', link_prev[2]
    nextKey:  ffff prevKey:  dddd
    

This will give you next and prev by insertion order. If you add items in
random order then just keep track of your items in sorted order.

